curl -H参数空格前缀导致代理模式下头部注入漏洞分析
curl -H参数空格前缀导致代理模式下头部注入漏洞分析
摘要
安全研究人员发现curl工具在使用-H "[space]header:value"
格式添加HTTP头部时,若配合--proxy
参数使用,会导致该头部被注入到前一个HTTP头部中的异常行为。该问题在macOS Sequoia 15.1系统上的curl 8.11.0版本中复现成功。
复现步骤
curl -X GET "https://example.com" -H "Secure-Header: XYZ" -H " new-header-that-will-inject-to-previous-header: value" --proxy 127.0.0.1:8080
技术细节
- 该行为仅在同时使用
--proxy
参数时出现 - 当第一个头部本身包含空格前缀时,该头部会被附加到前一个头部
- 不使用代理参数时行为正常(每个头部单独发送)
- 同样适用于
-H @file.txt
形式,当文件内容以空格开头时
影响分析
虽然目前没有明确的攻击场景,但由于curl被广泛使用,当@file.txt
或单个头部名称可能被攻击者控制时,可能导致:
- 构造畸形请求发送到服务器
- 头部直接附加到Host头部导致错误日志记录
- 根据具体程序可能引入其他问题
解决方案建议
由于HTTP头部字段名本身不允许包含空格,建议curl在处理时去除空格并始终将头部添加到新行。
技术讨论
curl维护者指出这是文档记录的行为(HTTP/1允许"折叠"头部),但研究人员通过多个代理测试发现:
- 仅当格式为
"[space]something:something"
时才会传递 - 格式为
"[space]abc"
的头部会被curl直接移除 - 测试使用多种代理(包括自定义Python代理)均显示此行为
该报告最终被标记为"Not Applicable",但揭示了curl在HTTP头部处理上的特殊行为值得开发者注意。
原始漏洞报告截图1
原始漏洞报告截图2
原始漏洞报告截图3
原始漏洞报告截图4
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码