揭露PowerShell中的“curl”别名意外执行JavaScript的安全风险

报告详细描述了一个在Windows PowerShell环境中发生的安全问题:当使用内置的“curl”别名(实为Invoke-WebRequest命令)请求一个返回JavaScript脚本的端点时,脚本会被意外执行,而非仅显示源代码。此问题源于PowerShell别名与原生cURL工具的混淆,可能导致非预期的代码执行和进程挂起。

报告 #3442024 - 在PowerShell中本不应执行JavaScript时却执行了

时间线 lim_e 向 curl 项目提交了一份报告。 10 小时前


lim_e 提交的报告内容: 在Windows上,如果我在PowerShell中运行curl命令请求一个本应返回 <script>alert(1)</script> 的脚本,脚本会被执行,而本不应该如此。 我没有使用AI来发现或报告此漏洞。

受影响版本 在CMD中,我运行了 curl --version curl 8.16.0 (Windows) libcurl/8.16.0 Schannel zlib/1.3.1 WinIDN 在PowerShell中,它无法识别 --version 标志。 我没有在这台电脑上安装任何特定的curl版本,因此它应该是Windows 11自带的默认版本并随系统更新。

重现步骤:

  1. 托管一个会返回 <script>alert(1)</script> 的端点(本例中为 ctf.eztfsp.lv:8009/test.js)。
  2. 打开PowerShell。
  3. 在PowerShell中运行 curl ctf.eztfsp.lv:8009/test.js
  4. 它会弹出一个显示“来自网页的消息 1”的窗口。

支持材料/参考: 我附上了一个.gif文件,演示了它在PowerShell中如何工作,以及在CMD中如何工作。 [附件 / 参考]

影响 摘要: 在PowerShell的curl中执行JavaScript。 它还会导致进程挂起,当警告窗口打开时,我无法使用Ctrl+C来停止curl进程,因此这可能被用来挂起PowerShell脚本。

附件 1个附件

lim_e 将报告标题从“runs javascript on embedded browser when it shouldnt”改为“runs javascript on powershell when it shouldnt”。 10 小时前

dgustafsson (curl 团队成员) 发表了评论。 10 小时前 感谢您的报告。Curl不会执行任何内容,这难道不是PowerShell的问题吗?

lim_e 发表了评论。 10 小时前 所以你的意思是这应该向微软报告?我理解可能是他们做了一个糟糕的实现,因为我刚刚在我的工作电脑上测试了,通过PowerShell也出现了同样的情况。

bagder (curl 团队成员) 关闭了报告并将状态改为“不适用”。 10 小时前

在PowerShell中,它无法识别 –version 标志。

那么你运行的就不是curl。你很可能使用了PowerShell提供的curl别名,它实际上是调用 Invoke-Webrequest。它们与“真正的”curl毫无关系。 相关链接:https://daniel.haxx.se/blog/2016/08/19/removing-the-powershell-curl-alias/ 这不是一个curl的安全问题。

lim_e 发表了评论。 9 小时前 好的,感谢你提供的信息,对于这次误报我感到抱歉。

bagder (curl 团队成员) 请求公开此报告。 9 小时前 根据项目透明度的政策,我们希望所有报告都被公开披露。

bagder (curl 团队成员) 公开了此报告。 8 小时前

lim_e 发表了评论。 2 小时前 出于安全原因,能否请删除此工单。我正在与微软沟通,希望能澄清并缓解这个漏洞。

报告信息

  • 报告日期: 2025年11月26日,世界标准时间上午7:35
  • 报告者: lim_e
  • 报告对象: curl
  • 报告ID: #3442024
  • 严重性: 未评级 (—)
  • 披露日期: 2025年11月26日,世界标准时间上午9:32
  • 弱点: 未正确中和网页中的脚本相关HTML标签(基础XSS)
  • CVE ID: 无
  • 赏金: 无
  • 账户详情: 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计