curl -H 空格前缀导致代理模式下的头部注入
漏洞概述
在curl 8.11.0版本中,当使用--proxy
参数时,-H
选项如果包含前导空格,会导致HTTP头部被注入到前一个头部中,而不是作为新的独立头部发送。
环境信息
- 操作系统:macOS Sequoia 15.1
- curl版本:8.11.0 (aarch64-apple-darwin24.1.0)
- 影响条件:必须使用
--proxy
参数
复现步骤
基本复现案例
|
|
结果分析
带有前导空格的头部会被注入到前一个头部中,形成:
|
|
无代理模式下的正常行为
|
|
在无代理模式下,头部正常发送,每个头部占据独立行。
文件输入方式
该漏洞同样影响通过文件输入头部的情况:
|
|
其中file.txt内容以空格开头时也会触发此行为。
安全影响
- 头部注入:攻击者可能通过控制输入文件或单个头部名称,构造畸形请求
- Host头部注入:特定情况下可能注入到Host头部,导致错误日志记录
- 服务器端解析问题:畸形请求可能导致服务器端解析异常
技术细节
- 仅影响HTTPS请求
- 需要代理参数存在
- 空格的头部字段名会被curl移除,但格式为
[space]something:something
的头部会被保留并触发注入
解决方案建议
由于HTTP头部字段名不能包含空格,建议curl在处理时:
- 去除前导空格
- 始终将每个头部添加到新行
项目响应
curl团队认为此行为是文档化特性而非漏洞,HTTP/1协议允许代理进行头部折叠。该报告最终被标记为"Not Applicable"。
注意:虽然该问题被认定为预期行为,但开发人员在使用curl时应意识到这种空格处理特性可能带来的安全影响。