本文详细分析了curl在跨源重定向时未正确剥离Proxy-Authorization头部的问题,包含漏洞重现步骤、技术讨论及curl团队的官方回应,涉及HTTP代理认证机制的安全实践。
curl未在跨源重定向时剥离Proxy-Authorization头部的安全漏洞分析
漏洞概要
curl在8.14.1版本中存在未剥离Proxy-Authorization头部的安全缺陷。当服务器返回跨源重定向响应时,curl会正确移除Authorization和Cookie头部,但会错误保留Proxy-Authorization头部。
技术细节
受影响版本
重现步骤
1
2
3
4
|
curl -L 'https://github.com/php/php-src/archive/refs/tags/php-8.4.8.tar.gz' \
-H 'Authorization: foo' \
-H 'Proxy-Authorization: bar' \
-vvv
|
- 首次请求包含所有头部:
1
2
3
4
|
> GET /php/php-src/archive/refs/tags/php-8.4.8.tar.gz HTTP/2
> Host: github.com
> Authorization: foo
> Proxy-Authorization: bar
|
- 服务端返回重定向:
1
|
location: https://codeload.github.com/php/php-src/tar.gz/refs/tags/php-8.4.8
|
- 后续请求错误保留代理凭证:
1
2
3
|
> GET /php/php-src/tar.gz/refs/tags/php-8.4.8 HTTP/2
> Host: codeload.github.com
> Proxy-Authorization: bar
|
技术讨论
- Golang团队已修复类似问题(CVE-2025-4673)
- Python requests库存在相关安全公告(GHSA-j8r2-6x86-q33q)
- curl团队认为这是预期行为:
- 代理凭证通常适用于同一代理
- 用户可通过
--proxy-header
明确控制
- RFC 9110规定Proxy-Authorization为"hop-by-hop"头部
安全影响
可能导致代理认证信息泄露给非预期的第三方服务器。
解决方案
curl团队建议:
- 使用原生代理凭证配置选项
- 调用方应自行处理敏感头部
- 不认为这是curl的安全漏洞
报告最终状态:Not Applicable(非安全问题)