CVE-2021-40444恶意docx生成器利用工具 适用于任意DLL

CVE-2021-40444恶意docx生成器利用工具 适用于任意DLL

恶意 docx 生成器利用工具 CVE-2021-40444(Microsoft Office Word 远程代码执行漏洞),适用于任意 DLL 文件。

背景

尽管许多 PoC 已经在互联网上出现,但我猜想给自己一个将这个漏洞武器化的机会,因为我发现可用的信息缺乏,值得分享有价值的信息,同时考虑到微软已经针对这个漏洞发布了补丁。

到目前为止,我所看到的创建一个完全工作的生成器的唯一有价值的资源是:

上述资源概述了创建完整链所需的许多要求。为避免重复过多不必要的信息,我只总结一下相关细节。

漏洞利用链

  1. Docx 已打开
  2. 存储在 document.xml.rels 中的关系指向恶意 html
  3. 启动 IE 预览以打开 HTML 链接
  4. HTML 中的 JScript 包含一个指向 CAB 文件的对象和一个指向 INF 文件的 iframe,以“.cpl:”指令为前缀
  5. cab文件打开,INF文件存放在%TEMP%\Low目录下
  6. 由于 CAB 中的路径遍历 (ZipSlip) 漏洞,可以将 INF 存储在 %TEMP%
  7. 然后,使用“.cpl:”指令打开 INF 文件,导致通过 rundll32 侧加载 INF 文件(如果这是一个 DLL)

被忽视的条件

这个漏洞利用有很多被忽视的条件,这导致即使是好的 PoC,比如 lockedbyte 的 PoC,也无法正常工作。

也许没有人明确地“发布”它们以避免漏洞被更多地利用。不过现在已经打补丁了,应该不会有什么麻烦再放出细节吧。

CVE-2021-40444恶意docx生成器利用工具 适用于任意DLL

HTML文件

至于这种tweet威尔杜曼的HTML应该是大小至少4096个字节,以在MS Word中触发“预览” 。

cab文件

CAB 文件需要进行字节修补以避免提取错误并实现 ZipSlip:

  • filename.inf 应该成为 ../filename.inf
  • filename.inf 应该是 <12-char>.inf
  • CFFOLDER.typeCompress 应为 0(未压缩)
  • CFFOLDER.coffCabStart 应该增加3
  • CFFOLDER.cCfData 应该是 2
  • CFFILE.cbFile 应该大于整体 CFHEADER.cbCabinet
  • CFDATA.csum 应该重新计算(或清零)

这些限制的原因很多,我没有花足够的时间去深入了解所有这些,但让我们看看最重要的:

  • TypeCompress:如果 CAB 被压缩,在目标文件中打开它以触发 INF 写入的技巧将失败
  • CoffCabStart : CoffCabStart 给出第一个 CFDATA 结构的绝对位置,因为我们添加了一个 ‘../’,我们需要将它增加 3 以指向文件(这更像是一个猜测)
  • cCfData:由于只有 1 个文件,我们应该只有 1 个 CFDATA,我不太确定为什么必须将其设置为 2
  • cbFile:有趣的是,如果 CAB 提取没有任何错误,INF 文件将被 WORD 标记为删除,从而破坏漏洞利用。防止这种情况的唯一方法是让 WORD 相信提取失败。如果 cbFile 值被定义为大于 CAB 文件本身,则提取器将在读取 cbFile 中定义的所有字节之前达到 EOF,从而引发提取错误。
  • 最后但并非最不重要的是,应该重新计算csum值。幸运的是,正如j00sean所指出的 ,根据MS 文档,这个值可以是 0

注意 1:Defender 现在通过使用该_IMAGE_DOS_HEADER.e_magic值作为签名来检测 CAB 文件是否包含 PE ,从而可能避免将 PE 文件嵌入到 CAB 中。可以绕过这个签名吗?我不确定,但正如之前所观察到的,这是一个修补过的漏洞,所以我不打算在这方面投入更多时间。由好奇的读者进一步探索。

NOTE2:Microsoft Patch 阻止任意 URI 方案,显然使用了黑名单方法(这只是一个假设)

DLL 攻击

与 CVE-2021-40444 相关的主要攻击链是通过.cplURI 方案加载的 DLL 攻击。为了利用它,攻击者需要生成一个特制的 DLL。如果你想测试它,试试我的evildll-gen 脚本。

JScript、VBScript、Javaw、MSIexec、…

正如Max Maluin所指出的,可以与滥用 IE 和相关文件扩展名的 URI 的多种文件类型进行交互。虽然这可能是利用 IE 的好方法,但它有局限性。

确实需要注意的是,漏洞利用中下载文件的方法是基于ActiveX控件更新的,不能用于下载任意文件。根据 Microsoft文档,该codebase标签可以仅指向几种文件类型:OCX、INF 和 CAB。

即使我们可以直接下载 OCX 或 INF 文件,我们仍然不能确保将文件下载到系统内的正确位置。使用 cab 漏洞,可以使用.inf路径遍历将文件移动到众所周知的路径中,但在任何其他情况下,文件将存储在随机目录中,因此几乎不可能引用它。

截至今天,我还没有找到一种无需 CAB 文件即可链接下载和执行的方法。

注意:仅就 IE 而言,HTML 走私可能是利用该漏洞的一种可能情况。

使用混合 RAR 文件的无Cab文件攻击

这种技术首先由公开爱德华布劳恩Twitter和在进一步说明纸张。

请注意,使用这种技术,攻击链有点不同。此攻击要求用户下载特制的 RAR 文件,该文件通过链接有效的 WSF 脚本和有效的 RAR 文件获得。打开后,RAR 将包含一个带有对 HTML 的引用的 DOCX,后者将尝试将 RAR 文件加载为 WSF 脚本。

总结一下:

  1. 下载特制的RAR文件(可能是下载文件夹)
  2. DOCX 提取并打开
  3. 存储在 document.xml.rels 中的关系指向恶意 html
  4. 启动 IE 预览以打开 HTML 链接
  5. HTML 中的 JScript 包含一个指向 RAR 文件的脚本/iframe,前缀为“.wsf:”URI 方案
  6. 由于 RAR 被设计为同时是有效的 RAR 和有效的 WSF 脚本,因此脚本被执行

该工具实现的漏洞利用PoC有哪些

生成器实用程序目前可以重现以下攻击:

攻击HTML模板目标传输方式执行方式Working
原始的攻击版本cab-orig-*WORDDOCXCAB + DLLYES
j00sean IE-only 攻击cab-orig-j00sanIEHTMLCAB + DLLYES
我的没有 DLL 的版本cab-uri-*WORDDOCXCAB + JS/VBSNO1
Eduardo B. 使用 RAR 的“CABless”攻击cabless-rar-*WORDRARWSFYES
修改j00sean攻击+HTML走私cabless-smuggling-*IEHTMLJS/VBSYES2

1某些环境下CAB下载不正确

2用户需要点击“保存”在IE上下载文件

CAB 文件解析器

该实用程序cab_parser.py可用于查看漏洞利用文件的标头,但不要将其视为完整的解析器。这是我开发的一个非常快速和肮脏的 CAB 标题查看器,以了解发生了什么。

工具下载地址

①GitHub:

https://github.com/klezVirus/CVE-2021-40444.zip

②云中转网盘:

yunzhongzhuan.com/#sharefile=Bb1kzVqp_
解压密码: www.ddosi.org

安装

生成器设计为在 Windows 上工作,因为它使用该makecab实用程序。

使用前,请务必安装所需的依赖项:

  • 使用 Virtualenv
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
  • 没有 Virtualenv
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements

用法

生成器使用起来很简单,即使它已经用许多不同的payloads和 Windows 版本进行了测试,它也不是万无一失的。我在不同的 Windows 版本中遇到了不同的行为。一旦我有更多细节要分享,我会在这里发布。

用法: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]

[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]

可选参数:
  -h, --help            显示此帮助信息并退出
  -P PAYLOAD, --payload PAYLOAD
                        用于利用的DLL有效负载
  -u URL, --url URL     恶意引用的服务器URL (CAB->INF)
  -o OUTPUT, --output OUTPUT
                        输出文件basename(没有扩展名)
  --host                如果设置,将在创建后托管有效负载
  -c COPY_TO, --copy-to COPY_TO
                        将有效载荷复制到备用路径
  -nc, --no-cab         使用该漏洞的无cab版本
  -t, --test            打开ie来测试最终的HTML文件

例子

  • 生成原始漏洞并在本地测试
python generator.py -u http://127.0.0.1 -P test\calc.dll --host 

注:端口由URL选择,漏洞利用根据payload文件扩展名生成

  • 使用 RAR 生成 CABless 漏洞并通过 IE 在本地进行测试
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t 
  • 使用 HTML 走私生成 CABless 漏洞(仅限 IE)并通过 IE 在本地进行测试
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t 

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注