curl未在跨源重定向时剥离Proxy-Authorization头部的安全漏洞分析

本文详细分析了curl在跨源重定向时未正确剥离Proxy-Authorization头部的问题,包含漏洞重现步骤、技术讨论及curl团队的官方回应,涉及HTTP代理认证机制的安全实践。

curl未在跨源重定向时剥离Proxy-Authorization头部的安全漏洞分析

漏洞概要

curl在8.14.1版本中存在未剥离Proxy-Authorization头部的安全缺陷。当服务器返回跨源重定向响应时,curl会正确移除Authorization和Cookie头部,但会错误保留Proxy-Authorization头部。

技术细节

受影响版本

  • curl 8.14.1

重现步骤

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. 首次请求包含所有头部:
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. 服务端返回重定向:
1
location: https://codeload.github.com/php/php-src/tar.gz/refs/tags/php-8.4.8
  1. 后续请求错误保留代理凭证:
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(非安全问题)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计