PowerShell中curl别名意外执行JavaScript的安全风险分析

本文详细分析了Windows PowerShell中curl别名存在的安全风险,当用户使用该别名访问恶意脚本时会导致JavaScript意外执行,并可能造成进程挂起。报告揭示了PowerShell内置命令与原生curl工具的区别及其潜在安全隐患。

PowerShell中curl别名意外执行JavaScript的安全风险分析

报告概述

报告ID: #3442024
报告标题: runs javascript on powershell when it shouldnt
报告平台: HackerOne
报告对象: curl项目

问题描述

在Windows系统中,当用户在PowerShell中运行curl命令访问返回<script>alert(1)</script>的脚本时,该JavaScript代码会被意外执行,而正常情况下不应发生这种情况。

受影响版本

  • 在CMD中运行curl --version显示:
    1
    
    curl 8.16.0 (Windows) libcurl/8.16.0 Schannel zlib/1.3.1 WinIDN
    
  • 在PowerShell中,--version标志不被识别
  • 测试环境为Windows 11默认自带的curl版本

复现步骤

  1. 搭建一个返回<script>alert(1)</script>的端点(测试用例:ctf.eztfsp.lv:8009/test.js)
  2. 打开PowerShell
  3. 在PowerShell中运行:curl ctf.eztfsp.lv:8009/test.js
  4. 结果:弹出一个显示"message from webpage 1"的窗口

影响分析

安全影响

  • 在PowerShell的curl中执行JavaScript
  • 进程挂起:当警告窗口打开时,无法使用Control+C停止curl进程
  • 可能被利用来挂起PowerShell脚本

技术讨论

curl团队回应

dgustafsson (curl工作人员) 评论:

感谢您的报告。curl不会执行任何内容,这难道不是PowerShell的问题吗?

bagder (curl工作人员) 关闭报告并将状态改为"不适用":

在PowerShell中它没有识别--version标志,那么您运行的就不是curl。您可能使用了PowerShell提供的curl别名,该别名调用的是Invoke-WebRequest。它们与"真正的"curl毫无关系。

相关链接:https://daniel.haxx.se/blog/2016/08/19/removing-the-powershell-curl-alias/

这不是curl的安全问题。

后续进展

  • 报告者lim_e确认这是误报,并向Microsoft报告此问题
  • 报告者请求删除该工单以安全原因
  • 按照项目透明政策,该报告被公开披露

报告元数据

  • 报告时间: 2025年11月26日 07:35 UTC
  • 披露时间: 2025年11月26日 09:32 UTC
  • 弱点分类: Web页面中脚本相关HTML标签的不当中和(基本XSS)
  • 严重等级: 无评级
  • 赏金: 无
  • CVE ID: 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计