漏洞分析:CVE-2021-40444
漏洞概述
2021 年 8 月 21 日,MSTIC 观察到一名 Mandiant 员工在社交媒体上发布的帖子,该员工具有跟踪 Cobalt Strike Beacon 基础设施的经验。所写文章重点介绍了一个于 2021 年 8 月 19 日上传到 VirusTotal的 Microsoft Word 文档(SHA-256:3bddb2e1a85a9e06b9f9021ad301fdcde33e197225ae1676b8c6d0b416193ecf)。
MSTIC 对样本进行了分析,确定了文档中的异常对象,认为可能是未公开的漏洞。MSTIC 立即与 Microsoft 安全响应中心联系,并开始进行补丁工作。在此过程中,MSTIC 与 Mandiant 的原始发现者合作,减少对该问题的公开讨论,并避免在可用补丁之前引起威胁发起者对此问题的关注。Mandiant 与 MSTIC 合作并进行了逆向评估,并将他们的发现提交给 MSRC(Microsoft Security Response Center)。
2021 年 9 月 7 日,Microsoft 发布了针对 CVE-2021-40444 的安全公告,其中包含部分解决方法。与此同时,第三方研究人员向微软报告了来自 Mandiant 最初共享的同一活动的样本。该样本于 9 月 8 日公开披露,并且观察到在 24 小时内的漏洞攻击有所增加。
CVE-2021-40444的利用链如下:首先请求目标链接下载一个cab临时文件,通过目录遍历漏洞保存inf文件在固定路径,然后通过url scheme(通过 url 可以启动某一个本地的应用程序)执行cpl文件的方式执行恶意inf文件。
漏洞分析
漏洞原理
- urlmon!DeleteExtractedFiles函数会删除下载的inf文件,如何规避?
- urlmon!RemoveDirectoryA函数会删除缓存inf文件的文件夹,如何规避?
mshtml下载cab临时文件后,Urlmon!GetSupportedInstallScopesFromFile函数中对cab包进行处理。在GetSupportedInstallScopesFromFile中先是通过Urlmon!GetExtnAndBaseFileName判断传入文件的后缀名,如果是“.cab”则返回2。之后通过urlmon!CreateUniqueCabTempDir为cab创建临时目录。
临时目录创建成功后,通过urlmon!ExtractInfFile来解压cab文件,提取其中的inf文件。在urlmon!ExtractInfFile函数中,urlmon!GetExtnAndBaseFileName函数判断提取是否为inf文件,再通过 urlmon!ExtractOneFile函数解压文件。
在urlmon!ExtractOneFile函数中,通过urlmon!Extract解压cab文件,其中传递给urlmon!Extract函数的参数为“../championship.inf”,也是cab文件中inf的构造的文件名称。其中urlmon!Extract函数会调用cabinet.dll对cab文件进行解压写入内存。
在调用cabinet.dll将inf文件写入内存时,攻击者伪造inf文件尺寸为0x415c00,远远大于真实inf文件尺寸,这就导致在调用cabinet!FDIGetFile函数时触发异常,不清理针对该文件在内存中的各种信息。
处理inf文件后,cabinet模块回调urlmon!fdiNotifyExtract函数,通过urlmon!catDirAndFile函数为inf文件生成路径,通过urlmon!Win32Open函数创建文件。
在urlmon!catDirAndFile函数生成文件路径时,没有对文件名进行验证,导致目录遍历,实际生成的为C:\User\ADMIN~1\AppData\Local\Temp\CabFB8D\../championship.inf。这就导致最后创建的文件驻留为C:\User\ADMIN~1\AppData\Local\Temp\championship.inf。因此规避了urlmon!RemoveDirectoryA函数删除临时目录的风险。
urlmon在处理cab文件后,会将缓存目录与文件进行删除。首先通过urlmon!DeleteExtractedFiles函数删除缓存文件,但是由于在调用cabinet模块时异常,内存中针对inf文件的信息没有清理,导致没有执行DeleteFileA函数,因此保留了inf文件,实现了文件驻留。
恶意的javascript通过url scheme机制侧加载恶意inf文件。其中,在mshtml!ShellExecURL函数中,可以直接通过shell32!ShellExecuteW执行inf文件。
Urlmon!catDirAndFile补丁
2021年9月15日微软发布了月度补丁,修补了该漏洞。主要是修补了urlmon.dll中catDirAndFile函数目录遍历漏洞,增加了字符替换,将“/”替换成“\”,同时利用PathIsPrefixA判断下载的文件路径是否和生成的缓存路径一致,不一致则无法创建inf文件。
mshtml!ShellExecURL补丁
在mshtml!ShellExecURL函数中,ShellExecuteW函数执行前增加了一些的检查,利用mshtml!IsValidSchemeName函数对执行的路径进行检查,保证只有字母开头,十进制和ascii字符文件路径才能执行,使“.cpl”这类路径无法执行了。
其他
变种
目前的变种趋向于利用十六进制和字符串进行防检测。
Yara
针对恶意文件检测
Yara结合python脚本进行检测。
rule xml_encoded_2021_40444 : Windows CVE {
meta: description = “Detects possible CVE-2021-40444 with no encoding, HTML/XML entity (and hex notation) encoding, or all 3” strings: $xml = “<?xml” ascii wide $mhtml = /Target\s*=\s*\”([Mm]|&#(109|77|x6d|x4d);)([Hh]|&#(104|72|x68|x48);)([Tt]|&#(116|84|x74|x54);)([Mm]|&#(109|77|x6d|x4d);)([Ll]|&#(108|76|x6c|x4c);)(:|:|:)/ ascii wide $targetmode = /TargetMode\s*=\s*\”([Ee]|&#(x45|x65|69|101);)([Xx]|&#(x58|x78|88|120);)([Tt]|&#(x74|x54|84|116);)/ ascii wide condition: filesize < 500KB and $xml in (0..50) and $mhtml and $targetmode } /* xml_encoded_2021_40444 .\document.xml.rels 0x442:$xml_e: Target=”mhtml:http 0x442:$xml_r: Target=”mhtml: 0x62d:$t_mode_e: TargetMode=”External” 0x62d:$t_mode_r: TargetMode=”Ext */ rule xml_obfus_hunting_1 { meta: author = “James E.C, Proofpoint” description = “Suspicious leading 0’s in XML entity encoding” credit = “@DissectMalware, @cyb3rops” strings: $xml = “<?xml” ascii wide $leading_1 = “�” ascii wide $leading_2 = “�” ascii wide condition: filesize < 500KB and $xml in (0..50) and 1 of ($leading_*) } |
最新事件
2021年9月中旬,卡巴斯基观察到攻击者试图利用 CVE-2021-40444 漏洞攻击研发部门、能源部门和大型工业部门、银行和医疗技术开发部门以及电信和 IT 部门的公司。
2021年9月22日,Malwarebytes安全研究员发现黑客利用CVE-0-40444漏洞攻击俄罗斯政府,包括内政部和国家火箭中心。研究人员指出,针对俄罗斯实体发起网络犯罪的证据很少见。考虑到攻击者的目标是该国的太空/火箭开发商,有可能是国家支持的APT组织实施了这些网络攻击,其中恶意文档访问http://trendparlye[.]com/wiki0509[.]html加载恶意js代码,并下载http://trendparlye[.]com/task[.]cab,最后加载小型载荷task.inf(658efec066088e3f4558b9f2b3a57604),最后载荷为topbar.png (0cf9f934bfa992a48e21bf96852f174a),其中最后载荷c2为https://ilivesuite[.]com/wp-includes/kjiusg.php、https://dubbingking[.]com/wp-content/plugins/elementor/kjiusg.php、https://ricardodelahoz[.]com/wp-content/plugins/LayerSlider/z98unxk.php。
已发现的相关恶意文档
84674acffba5101c8ac518019a9afe2a78a675ef3525a44dceddeed8a0092c69
2e068beb40f8901b698d4fc2f5766564c8324d5ba95fb0a0ffa841f5da5c7e72
199b9e9a7533431731fbb08ff19d437de1de6533f3ebbffc1e13eeffaa4fd455
34ec4f2defd549b7c9a026b5498d09f5595ffe1396fe56509743820f20c610be
3bddb2e1a85a9e06b9f9021ad301fdcde33e197225ae1676b8c6d0b416193ecf
5b85dbe49b8bc1e65e01414a0508329dc41dc13c92c08a4f14c71e3044b06185
5e6e8883173603a0b3811302ee14a14c4f5708f1b756f2906a0749dd2fd1cfa0
938545f7bbe40738908a95da8cdeabb2a11ce2ca36b0f6a74deda9378d380a52
a5f55361eff96ff070818640d417d2c822f9ae1cdd7e8fa0db943f37f6494db9
cb85def3a47325722d0f87adb1975f6536de09095c1af6229bdb12b7fc32423b
d0e1f97dbe2d0af9342e64d460527b088d85f96d38b1d1d4aa610c0987dca745
e48f134c321fdc31a646e747993b1592f576519d7ebbc0ae9b0eac7337eaf422
参考链接
- https://mp.weixin.qq.com/s/q0lbegDjLViLI48N6RjGVw?scene=21#wechat_redirect
- https://mp.weixin.qq.com/s/6q9fbggpkhd4PtwnghvZgg?scene=21#wechat_redirect
- https://mp.weixin.qq.com/s/hHlscdLIvO0BY173ksq8vA
- https://mp.weixin.qq.com/s?__biz=Mzg3MTU0MjkwNw==&mid=2247484605&idx=1&sn=353e8ac03a9cca128e029b0054c2823e&chksm=cefdbda9f98a34bf8cc502d421b0459753ee39d38c01ad02e529a3b4a90fecf172addffcb680&scene=178&cur_album_id=2055944212667219970#rd
- https://paper.seebug.org/1718/
- https://paper.seebug.org/719/
- https://blog.malwarebytes.com/reports/2021/09/mshtml-attack-targets-russian-state-rocket-centre-and-interior-ministry/
- https://www.virustotal.com/gui/search/cve-2021-40444/comments
- https://www.sentinelone.com/blog/peeking-into-cve-2021-40444-ms-office-zero-day-vulnerability-exploited-in-the-wild/
- https://twitter.com/h2jazi/status/1438602462231941122