Authorization Header Leak via –location-trusted in Curl
漏洞概述
Curl的–location-trusted选项在跟随跨域重定向时会转发Authorization头,将Basic认证凭据暴露给不可信的主机。
如果攻击者控制重定向端点,他们可以从任何使用Basic认证的请求中窃取凭据。 与出于安全考虑会剥离认证头的–location选项不同,–location-trusted会在没有任何警告的情况下转发这些头信息,导致意外的凭据泄露。 这违反了认证最佳实践,并引入了严重的安全风险。
受影响版本
运行:
|
|
示例输出:
|
|
测试环境:
- Linux (Ubuntu 22.04)
- macOS 14 Sonoma
- Windows 11 (WSL2)
复现步骤
1. 启动恶意重定向服务器
在攻击者控制的机器上运行此Python脚本:
|
|
2. 使用认证和–location-trusted运行Curl
执行:
|
|
预期行为
- 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:无
- 赏金:无