报告 #3442024 - PowerShell 中的 curl 别名在不应执行时运行了 JavaScript
报告人: lim_e 提交日期: 8天前(相对于报告撰写时) 状态: 已公开
问题描述
在 Windows 系统中,当我在 PowerShell 中运行 curl 命令来获取一个本应返回 <script>alert(1)</script> 的脚本时,它却直接执行了该脚本,而这本不应该发生。
我未使用 AI 来发现或报告此漏洞。
受影响版本
在 CMD 中我运行了 curl --version:
|
|
在 PowerShell 中,--version 标志未被识别。我未在这台电脑上安装任何特定的 curl 版本,因此它应该是 Windows 11 自带并随系统更新的默认版本。
复现步骤
- 托管一个将返回
<script>alert(1)</script>的端点(本例中为ctf.eztfsp.lv:8009/test.js)。 - 打开 PowerShell。
- 在 PowerShell 中运行
curl ctf.eztfsp.lv:8009/test.js。 - 会弹出一个窗口,显示“来自网页的消息 1”。
支持材料/参考文献
我已附上一个 .gif 文件,演示了它在 PowerShell 中的工作方式以及在 CMD 中的工作方式。
影响
摘要:
- 在 PowerShell 的 curl 别名中运行了 JavaScript。
- 该问题还会导致进程挂起。当警告窗口打开时,我无法使用
Control+C来停止 curl 进程,因此这可能被用于挂起 PowerShell 脚本。
时间线与讨论
-
lim_e 将报告标题从“runs javascript on embedded browser when it shouldnt”改为“runs javascript on powershell when it shouldnt”。
-
dgustafsson (curl 项目成员) 发表了评论:“感谢你的报告。Curl 不会执行任何内容,这难道不是 PowerShell 的问题吗?”
-
lim_e 回复:“那么你的意思是这应该向微软报告?我理解可能是他们的实现有问题,因为我在工作电脑上测试了,通过 PowerShell 也出现了同样的情况。”
-
bagder (curl 项目成员) 关闭了报告并将状态改为“不适用”,并解释道:
“在 PowerShell 中它没有识别
--version标志。那么你运行的就不是 curl。你可能使用了 PowerShell 提供的、调用Invoke-WebRequest的 curl 别名。它们与‘真正的’ curl 毫无关系。相关链接:https://daniel.haxx.se/blog/2016/08/19/removing-the-powershell-curl-alias/ 这不是一个 curl 的安全问题。” -
lim_e 回复:“好的,感谢提供信息,为误报道歉。”
-
bagder 根据项目的透明度政策,要求公开此报告,随后将其公开。
-
lim_e 最后请求:“能否出于安全原因删除此工单。我正在与微软沟通,希望澄清并缓解此漏洞。”
报告元数据
- 报告 ID: #3442024
- 报告时间: 2025年11月26日,UTC 上午7:35
- 报告给: curl
- 严重性: 未评级 (—)
- 公开时间: 2025年11月26日,UTC 上午9:32
- 弱点分类: 网页中脚本相关 HTML 标签的不当中和(基本 XSS)
- CVE ID: 无
- 赏金: 无