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文件内容以空格开头。
潜在攻击场景
虽然暂无具体的利用场景,但由于curl的广泛使用,可以想象在某些情况下:
- 通过@file.txt方式输入头部
- 单个头部名称输入可能被攻击者控制
- 导致向服务器发送格式错误的请求
严重请求示例
|
|
这种情况下,头部会直接附加到Host头部,可能导致:
- 不正确的日志记录
- 根据程序逻辑引入其他问题
技术细节
- 仅影响HTTPS请求
- 头部字段名不能包含空格
- 建议解决方案:去除空格并始终添加到新行
官方回应
curl团队认为这是文档记录的行为,man页面中明确指出:
- curl会原样传递给定的字符串,不进行任何过滤或安全保护
- 包括空白字符和控制字符
- 在HTTP/1中,可以通过代理传递"折叠"头部
影响评估
通过-H
选项实现的前一头部/前一行的注入漏洞,评级为中等严重性(4-6.9分)。