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: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 | 无 |
| 赏金 | 无 |