PowerShell中的curl别名安全风险:意外执行JavaScript的XSS问题

本文详细披露了一个在Windows PowerShell环境下因curl别名设计而意外执行远程JavaScript代码的安全问题。报告者通过复现步骤展示了攻击场景,并讨论了其潜在影响,最终确认此问题根源在于PowerShell对Invoke-WebRequest的别名实现,而非curl工具本身。

报告 #3442024 - PowerShell 中意外运行 JavaScript

时间线

lim_e 向 curl 提交了一份报告。 (14天前)

在 Windows 系统中,如果我在 PowerShell 中针对一个本应显示 <script>alert(1)</script> 的脚本运行 curl 命令,该脚本会被执行,而这本不应发生。

我没有使用 AI 来发现或报告此漏洞。

受影响版本

在 CMD 中我运行了 curl --versioncurl 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 脚本。

附件

lim_e 将报告标题从“在不应运行时于嵌入式浏览器中运行 JavaScript”更改为“在不应运行时于 PowerShell 中运行 JavaScript”。 (14天前)

dgustafsson (curl 工作人员) 发表了评论。 (14天前) 感谢您的报告。Curl 不会执行任何内容,这难道不真的是一个 PowerShell 的问题吗?

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

bagder (curl 工作人员) 关闭了报告并将状态更改为“不适用”。 (14天前)

在 powershell 中,它未能识别 –version 标志。

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

lim_e 发表了评论。 (14天前) 好的,感谢您提供的信息,对于误报报告我表示歉意。

bagder (curl 工作人员) 请求公开此报告。 (14天前) 根据项目的透明政策,我们希望所有报告都被公开。

bagder (curl 工作人员) 公开了此报告。 (14天前)

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

报告于 2025年11月26日,UTC时间上午7:35

报告者 lim_e

报告给 curl

参与者 报告 ID #3442024

严重性 无评级 (—)

披露时间 2025年11月26日,UTC时间上午9:32

弱点 网页中脚本相关HTML标签的不当中和(基本XSS)

CVE ID

赏金

账户详情

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计