问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Windows PrintNightmare 漏洞 (CVE-2021-34527) 和补丁分析
漏洞分析
CVE-2021-34527是发生在windows打印服务中的漏洞,攻击者可以利用该漏洞使用低权限用户加载恶意DLL,实现远程代码执行。该漏洞于6月29日以0day的形式被披露[1],被称为PrintNightmare,直到7月6号,微软才推出相应的紧急补丁[2]。此外,该漏洞和微软六月份修复的CVE-2021-1675漏洞十分类似,都是通过加载DLL的方式实现代码执行。
**一、背景** ======== CVE-2021-34527是发生在windows打印服务中的漏洞,攻击者可以利用该漏洞使用低权限用户加载恶意DLL,实现远程代码执行。该漏洞于6月29日以0day的形式被披露\[1\],被称为PrintNightmare,直到7月6号,微软才推出相应的紧急补丁\[2\]。此外,该漏洞和微软六月份修复的CVE-2021-1675漏洞十分类似,都是通过加载DLL的方式实现代码执行。 **二、CVE-2021-1675分析** ===================== 该漏洞发生在 AddPrinterDriverEx函数,它一共有三个参数,其中第三个参数是flag,该flag有一个特殊的值并未在官方文档中出现:APD\_INSTALL\_WARNED\_DRIVER = 0x00008000。根据图 1中的代码逻辑,在调用InternalAddPrinterDriverEx之前,会通过bittest对flag的第0xf位进行校验。如果该值为1的话,则v12的值仍然为0,可以绕过24行中对Access的检查,成功调用InternalAddPrinterDriverEx。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-db7dd4d8bfd80ee978abe6e1407b67b55e5b8c1b.jpg)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-db7dd4d8bfd80ee978abe6e1407b67b55e5b8c1b.jpg) 图1. APD\_INSTALL\_WARNED\_DRIVER通过权限校验 微软在6月8日修复了该漏洞,具体是在AddPrinterDriverEx中加入了对权限的校验,重点在于YIsElevated、YIsElevationRequered和RunningAsLUA三个函数,当v12==0、v13==1并且v9==1时,flag中的0x8000会通过&amp;操作被去掉,导致后续调用到SplAddPrinterDriverEx时权限验证失败,阻止了漏洞发生。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-8e159d3cdcf0300fbb23c4298a3b319503f1072f.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-8e159d3cdcf0300fbb23c4298a3b319503f1072f.png) 图 2. CVE-2021-1675漏洞补丁 **三、CVE-2021-34527(PrintNightmare)分析** ====================================== PrintNightMare漏洞可以理解成对CVE-2021-1675补丁的绕过,本文以mimikatz\[3\]中提供的exp为例进行漏洞分析。 Mimikatz中利用的PrintNightmare漏洞使用到了另一个打印服务的API:RpcAsyncAddPrinterDriver,用于绕过上述补丁中的权限检查。如图 2代码所示,该API同样可以设置flag,增加APD\_INSTALL\_WARNED\_DRIVER,由于该函数没有增加校验过程,因此可以完美绕过后续的bittest检查,实现恶意DLL加载和代码执行。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e378efa0e46228e0bc0e108ff47698c918cb1f12.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e378efa0e46228e0bc0e108ff47698c918cb1f12.png) 图3. Mimikatz中printnightmare利用部分代码 具体看,exp首先调用spoolsv!TRemoteWinspool::RpcAsyncAddPrinterDriver函数,如图 4所示,该函数会调用TFunction4设置回调。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5a6876753caea3e5df3b403ffd25f41e6ae92ae4.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5a6876753caea3e5df3b403ffd25f41e6ae92ae4.png) 图4. RpcAsyncAddPrinterDriver函数 TFunction4设置了对YAddPrinterDriverEx的调用,如图 5所示,v7偏移128处即为YAddPrinterDriverEx;在图 6中,异步回调用到了a1偏移128处的函数指针进行调用,即调用了YAddPrinterDriverEx。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-8f048ec08affbc59cd482123b5ff28731bda43db.jpg)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-8f048ec08affbc59cd482123b5ff28731bda43db.jpg) 图5. TFunction4设置回调函数 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-487004f9e377076d08d2a8bff740c762df470b29.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-487004f9e377076d08d2a8bff740c762df470b29.png) 图6. 异步调用YAddPrinterDriverEx回调 调用到YAddPrinterDriverEx时,flag中的APD\_INSTALL\_WARNED\_DRIVER项仍然存在,因此可以绕过添加DLL前的权限检查,实现DLL加载。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-f1811f5dbd1375c862a473c7b9ce0afdfbf3404a.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-f1811f5dbd1375c862a473c7b9ce0afdfbf3404a.png) 图 7. 恶意DLL加载 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-23b129105af517549494e133450977848ac03a2b.jpg)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-23b129105af517549494e133450977848ac03a2b.jpg) 图 8. 攻击成功界面 **四、PrintNightmare补丁分析** ======================== 微软的补丁主要修改了RpcAddPrinterDriverEx和RpcAsyncAddPrinterDriver两个函数。 1. RpcAddPrinterDriverEx补丁 -------------------------- 如图 9所示,在RpcAddPrinterDriverEx中,补丁增加了YIsInAdministratorGroup函数来判断当前用户是否在Administrator组中,如果不在的话,v9,v12和v13的值为false; [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-6b43e729821c60f944febbae75e0bfdca2a64d82.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-6b43e729821c60f944febbae75e0bfdca2a64d82.png) 图9. RpcAddPrinterDriverEx补丁 如图 10所示,YIsElevationRequired函数会通过获取注册表项NoWarningNoElevationOnInstall的值来判断是否需要提升权限以安装驱动,该函数返回值如果为true则表示需要。如果 v12的值为false,则会导致第58行的if判断成功,并进一步在59行中清除flag的APD\_INSTALL\_WARNED\_DRIVER项。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c25a0a419f4a569686ea8b0de079a4498a463d36.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c25a0a419f4a569686ea8b0de079a4498a463d36.png) 图10. YIsElevationRequired函数实现 YRestrictDriverInstallationToAdministrators函数同样也是通过注册表项来判断,是否可以向Administrator组中安装驱动,如果返回true的话,则会对图 9中61行的判断产生影响,导致无法添加驱动(在v13为false时)。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-47ad59b72bec45cf519f4a1958236c61a786079f.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-47ad59b72bec45cf519f4a1958236c61a786079f.png) 图 11. YRestrictDriverInstallationToAdministrators函数实现 2. RpcAsyncAddPrinterDriver补丁 ----------------------------- 在针对RpcAsyncAddPrinterDriver的补丁中,同样增加了对于权限的校验,当YIsElevationReuqred函数返回True时,同样会清除flag中的APD\_INSTALL\_WARNED\_DRIVER项。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-274153ef140fbc2a9b0a6dc679ca571e0e9c2a70.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-274153ef140fbc2a9b0a6dc679ca571e0e9c2a70.png) 图 12. RpcAsyncAddPrinterDriver补丁 **五、参考资料** ========== \[1\]. hhlxf (Jun 29, 2021). PrintNightmare. <https://github.com/afwu/PrintNightmare> \[2\]. MSRC (Jul 06, 2021). Windows Print Spooler Remote Code Execution Vulnerability (CVE-2021-34527). <https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527> \[3\]. Benjamin DELPY (Jul 01, 2021). mimikatz misc::printnightmare little POC. <https://github.com/gentilkiwi/mimikatz> 推荐阅读 \[从 CVE-2020-1048 到 CVE-2020-17001:Windows打印机模块中多个提权漏洞分析\]([http://https://mp.weixin.qq.com/s?\_\_biz=MzI2NTg4OTc5Nw==&amp;amp;mid=2247497271&amp;amp;idx=1&amp;amp;sn=2e2d557249a47ca2efc27fbbe4fc38e1&amp;amp;chksm=ea94c75ddde34e4b1cb5cb8a5d601959a1d861578b9a4ce383eae9bb56d3e0e41b4acc0b73d7&amp;amp;scene=21#wechat\_redirect](http://https//mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&amp;mid=2247497271&amp;idx=1&amp;sn=2e2d557249a47ca2efc27fbbe4fc38e1&amp;chksm=ea94c75ddde34e4b1cb5cb8a5d601959a1d861578b9a4ce383eae9bb56d3e0e41b4acc0b73d7&amp;scene=21#wechat_redirect) &quot;从 CVE-2020-1048 到 CVE-2020-17001:Windows打印机模块中多个提权漏洞分析&quot;) \[微软“照片”应用Raw 格式图像编码器漏洞 (CVE-2021-24091)的技术分析\]([http://https://mp.weixin.qq.com/s?\_\_biz=MzI2NTg4OTc5Nw==&amp;amp;mid=2247502693&amp;amp;idx=1&amp;amp;sn=0daf4033d561438e292f3eb4f09e5a9d&amp;amp;chksm=ea94fa0fdde37319e7b1a6767bf76396b3b91e1326ef9e397b38fe69443f651d7f52581ff9ec&amp;amp;scene=21#wechat\_redirect](http://https//mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&amp;mid=2247502693&amp;idx=1&amp;sn=0daf4033d561438e292f3eb4f09e5a9d&amp;chksm=ea94fa0fdde37319e7b1a6767bf76396b3b91e1326ef9e397b38fe69443f651d7f52581ff9ec&amp;scene=21#wechat_redirect) &quot;微软“照片”应用Raw 格式图像编码器漏洞 (CVE-2021-24091)的技术分析&quot;) \[开源OS FreeBSD 中 ftpd chroot 本地提权漏洞 (CVE-2020-7468) 的技术分析\]([http://https://mp.weixin.qq.com/s?\_\_biz=MzI2NTg4OTc5Nw==&amp;amp;mid=2247499356&amp;amp;idx=1&amp;amp;sn=f95ec3f9ca222c3ccef3d1162af259b8&amp;amp;chksm=ea94cf36dde34620d380b15d760f31aa5b3729cc379fa68a784ddcefde453df7db3a28a99f29&amp;amp;scene=21#wechat\_redirect](http://https//mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&amp;mid=2247499356&amp;idx=1&amp;sn=f95ec3f9ca222c3ccef3d1162af259b8&amp;chksm=ea94cf36dde34620d380b15d760f31aa5b3729cc379fa68a784ddcefde453df7db3a28a99f29&amp;scene=21#wechat_redirect) &quot;开源OS FreeBSD 中 ftpd chroot 本地提权漏洞 (CVE-2020-7468) 的技术分析&quot;) \[详细分析 Sonlogger 任意文件上传漏洞 (CVE-2021-27964)\]([http://https://mp.weixin.qq.com/s?\_\_biz=MzI2NTg4OTc5Nw==&amp;amp;mid=2247504045&amp;amp;idx=1&amp;amp;sn=71126e3dac71d3736468e96b9cedf9fe&amp;amp;chksm=ea94e1c7dde368d1ff301fee22cb5a1f5a65c0a967c889a2929ff95928154be87755e720d40d&amp;amp;scene=21#wechat\_redirect](http://https//mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&amp;mid=2247504045&amp;idx=1&amp;sn=71126e3dac71d3736468e96b9cedf9fe&amp;chksm=ea94e1c7dde368d1ff301fee22cb5a1f5a65c0a967c889a2929ff95928154be87755e720d40d&amp;scene=21#wechat_redirect) &quot;详细分析 Sonlogger 任意文件上传漏洞 (CVE-2021-27964)&quot;) \[手把手教你详细分析 Chrome 1day 漏洞 (CVE-2021-21224)\]([http://https://mp.weixin.qq.com/s?\_\_biz=MzI2NTg4OTc5Nw==&amp;amp;mid=2247503816&amp;amp;idx=1&amp;amp;sn=b0ae08a18c52c073c5b068dbd28c3a74&amp;amp;chksm=ea94fea2dde377b43503c1fdb4325ac1559fa8c2b0c6d650e3374d8865a7365aa823a0b16c12&amp;amp;scene=21#wechat\_redirect](http://https//mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&amp;mid=2247503816&amp;idx=1&amp;sn=b0ae08a18c52c073c5b068dbd28c3a74&amp;chksm=ea94fea2dde377b43503c1fdb4325ac1559fa8c2b0c6d650e3374d8865a7365aa823a0b16c12&amp;scene=21#wechat_redirect) &quot;手把手教你详细分析 Chrome 1day 漏洞 (CVE-2021-21224)&quot;) \[Codecov后门事件验证分析\]([https://mp.weixin.qq.com/s?\_\_biz=MzI2NTg4OTc5Nw==&amp;amp;mid=2247503674&amp;amp;idx=2&amp;amp;sn=b35c0a3d3d1ca1423065739374b05aeb&amp;amp;chksm=ea94fe50dde377465a54d11a561b7f0c5914dc609e0f86bb14ee256c818ac1e1f1c84ae0e905&amp;amp;scene=21#wechat\_redirect](https://mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&amp;mid=2247503674&amp;idx=2&amp;sn=b35c0a3d3d1ca1423065739374b05aeb&amp;chksm=ea94fe50dde377465a54d11a561b7f0c5914dc609e0f86bb14ee256c818ac1e1f1c84ae0e905&amp;scene=21#wechat_redirect) &quot;Codecov后门事件验证分析&quot;)
发表于 2021-07-09 09:44:23
阅读 ( 5428 )
分类:
漏洞分析
2 推荐
收藏
0 条评论
请先
登录
后评论
奇安信代码卫士
2 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!