curl潜在XSS漏洞分析:未过滤URL参数处理的风险

本文详细分析了curl中通过glob_url()函数和urlnode->url处理URL输入时可能存在的跨站脚本(XSS)漏洞,包括复现步骤、影响范围及官方回应,探讨了客户端与服务器端安全责任的边界。

报告 #3118915 - curl中通过未过滤URL参数处理导致的潜在XSS向量

时间线

redfoxsec 提交报告至 curl。
2025年4月30日,UTC时间1:08

描述

摘要:

在分析curl源代码期间,通过glob_url()函数及urlnode->url处理URL输入的方式,识别出一个可能的跨站脚本(XSS)向量。不当的输入验证或转义可能导致不可信数据被不安全地处理。

受影响版本:

最新GitHub克隆的curl/curl。
测试环境:Kali Linux (VirtualBox)
版本命令:
curl -v

复现步骤:

  1. 克隆仓库:
    git clone https://github.com/curl/curl.git
    cd curl
  2. 搜索漏洞代码引用:
    grep -rn "glob_url" src/
    grep -rn "urlnode" src/
    grep -rn "strcpy" src/
  3. 在实际请求中尝试使用编码的XSS字符串作为载荷:
    curl "http://test.com?param=%3Cscript%3Ealert(1)%3C/script%3E" -w "%{url_effective}"
  4. 观察失败行为及载荷如何处理或拒绝(301重定向、畸形输入、反射部分等)。

支持材料/参考文献:

  • 终端输出,包括代码搜索和载荷尝试
  • glob_url()使用及不安全模式
  • 使用curl注入载荷的尝试
  • 附截图供参考

影响

如果成功利用,此缺陷可能通过不安全处理用户控制的URL导致XSS。
攻击者可以:

  • 窃取会话cookies或令牌
  • 将受害者重定向至恶意网站
  • 在浏览器上下文中执行代码
  • 进行钓鱼或社会工程攻击

此问题在curl嵌入面向用户的应用、处理用户输入的CLI工具或消费不可信URL的CI流水线等场景中变得关键。

附件

5个附件:

  • F4299830: curl_poc_combined.jpg
  • F4299849: 17459739859212994623293594568921.jpg
  • F4299850: 17459739370401280908417306382914.jpg
  • F4299851: 17459740127977524118070527789321.jpg
  • F4299852: 17459739156244733383455011964397.jpg

评论

dfandrich (curl staff) 发表评论。
2025年4月30日,UTC时间1:41
不清楚您具体指控curl有什么问题,但似乎您混淆了HTTP客户端和HTTP服务器的区别。curl允许您向服务器发送任何内容;如果服务器返回的代码易受XSS问题影响,那不是curl的错。如果curl返回一个可用于XSS攻击的字符串,再次说明这不是curl的问题,而是消费该数据的 whatever 的问题。

bagder (curl staff) 关闭报告并将状态改为“不适用”。
2025年4月30日,UTC时间6:16
不当的输入验证或转义可能导致不可信数据被不安全地处理

不。如果您可以使用curl利用服务器中的某些东西,那不是因为curl的问题,而是因为服务器的问题。curl本身不可能易受“XSS向量”问题影响。
传递编码字符串作为查询参数是curl的完全合法使用。
这不是curl的安全问题。

bagder (curl staff) 请求披露此报告。
2025年6月28日,UTC时间12:24

bagder (curl staff) 披露此报告。
2025年6月30日,UTC时间18:54

报告详情

项目 详情
报告时间 2025年4月30日,UTC时间1:08
报告者 redfoxsec
报告对象 curl
参与者
报告ID #3118915
严重性 高 (7 ~ 8.9)
披露时间 2025年6月30日,UTC时间18:55
弱点 代码注入
CVE ID
赏金
账户详情
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计