文章总结: Microsoft在2025年12月通过KB5074204更新强化了PowerShell5.1中Invoke-WebRequest的安全机制,新增强制性安全警告以防止通过恶意网页注入执行任意脚本,解决了CVE-2025-54100高危漏洞。该更新推荐使用-UseBasicParsing参数,避免使用IE引擎解析网页内容,从而防止JavaScript等脚本执行。这一变更要求企业和运维团队立即更新脚本,在所有自动化平台中加入该参数,标志着WindowsPowerShell正式告别默认信任互联网内容的危险时代。
综合评分: 89
文章分类: 漏洞分析,安全建设,WEB安全
PowerShell 正式强化 Invoke-WebRequest 安全机制
原创
mayfly
独眼情报
2025年12月10日 15:45
湖北
2025 年 12 月,Microsoft 通过 KB5074204 累计更新,在 Windows 自带的 PowerShell 5.1 中为 Invoke-WebRequest(别名 iwr、curl、wget)加入了强制性安全警告。这一变化直接封堵了高危远程代码执行漏洞 CVE-2025-54100,从源头阻止攻击者通过恶意网页注入并执行任意脚本。
为什么必须加这道警告?——旧默认行为的致命缺陷
在 PowerShell 5.1 中,Invoke-WebRequest 默认使用 Internet Explorer 的 MSHTML(Trident)引擎进行完整 HTML 解析,导致:
- 网页中的 JavaScript、iframe、ActiveX、VBScript 等内容会被真实加载并执行;
- 只要攻击者控制一个域名返回恶意 HTML,即可在目标机器上直接运行代码;
- 在无人值守的自动化脚本、CI/CD 流水线、计划任务中,几乎等同于“无条件远程代码执行”。
这正是 CVE-2025-54100 的核心利用方式。
新增的安全警告长什么样?
当你在更新后的 PowerShell 5.1 中未指定安全参数直接访问网页内容时,会弹出黄色警告框:
「安全警告
Invoke-WebRequest 默认会完整解析网页内容,可能导致网页中的脚本代码被执行。
建议使用 -UseBasicParsing 参数以禁用脚本执行。
是否继续当前操作?[Y] 是 [N] 否 (默认否)」
- 选「是」:继续使用高风险的 IE 引擎(保留旧行为)
- 选「否」或直接回车:命令立即中止,强制改用安全方式
Security Warning: Script Execution Risk
Invoke-WebRequest parses the content of the web page. Script code in the web page might be run when the page is parsed.
RECOMMENDED ACTION:
Use the -UseBasicParsing switch to avoid script code execution.
Do you want to continue?
-UseBasicParsing 参数深度详解
| 项目 | 不加 -UseBasicParsing(旧默认) | 加上 -UseBasicParsing(2025 后推荐) |
| — | — | — |
| 解析引擎 | Internet Explorer MSHTML COM | PowerShell 内置轻量级解析器 |
| 是否执行 JavaScript | 会执行 | 完全不执行 |
| 是否加载 iframe/ActiveX | 会加载 | 不加载 |
| Cookie 支持 | 自动支持 | 不支持(需手动 -WebSession) |
| 自动重定向 | 支持 | 仍然支持 |
| 返回对象类型 | .ParsedHtml(IE COM 对象) | 普通 .NET 对象 |
| 执行速度 | 慢(需启动 IE 引擎) | 明显更快 |
| 安全性 | 极高风险(可直接 RCE) | 极高安全 |
| 适用场景 | 几乎已无正当需求 | 99.99% 的实际场景 |
一句话总结:
「-UseBasicParsing 把 Invoke-WebRequest 从‘迷你浏览器’彻底降级为‘纯 HTTP 客户端’,只负责拿数据,绝不运行任何网页代码。」
2025 年后的标准写法
# 下载页面内容(文本、JSON、HTML)
Invoke-WebRequest -Uri "https://example.com" -UseBasicParsing
# 下载文件
Invoke-WebRequest -Uri "https://example.com/file.zip" -UseBasicParsing -OutFile "file.zip"
# 只取响应文本
(Invoke-WebRequest -Uri "https://example.com" -UseBasicParsing).Content
# 需要自定义 Header 或 Cookie 时
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.Headers.Add("Authorization", "Bearer xxx")
Invoke-WebRequest -Uri "https://api.example.com" -UseBasicParsing -WebSession $session
记住:只要目标返回的是 HTML 或可能包含脚本的内容,就必须加 -UseBasicParsing,几乎没有例外。
对企业与运维团队的实际影响及应对措施
- 立即部署 2025 年 12 月的 KB5074204 更新(已包含在月度 Patch Tuesday 中);
- 全局搜索所有 .ps1 脚本,批量为 Invoke-WebRequest/curl/wget/iwr 添加 -UseBasicParsing;
- 在 SCCM、Intune、Ansible、Jenkins、GitLab CI 等自动化平台中强制加入该参数;
- 极少数必须保留旧行为的遗留脚本,可临时回答警告框「是」,但强烈建议尽快迁移。
最后
Microsoft 这次没有采取“一刀切”直接禁用危险行为,而是通过“温柔却不容拒绝”的警告 + -UseBasicParsing 参数的方式,既最大程度兼容现有脚本,又彻底终结了 CVE-2025-54100 类高危漏洞的利用可能。
对所有 PowerShell 用户来说,只需记住最核心的一条规则:
「2025 年 12 月之后,所有使用 Invoke-WebRequest 下载网页内容的脚本,一律加上 -UseBasicParsing,否则必被警告甚至中断。」
这一小小的参数强制普及,标志着 Windows PowerShell 正式告别“默认信任互联网内容”的危险时代,迈入真正安全默认的新阶段。
参考:
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-54100
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:独眼情报 mayfly《PowerShell 正式强化 Invoke-WebRequest 安全机制》