curl mishandles %0c%0b
sequences in HTTP responses leading to CRLF confusions, Headers and Cookies Injection
报告摘要
在针对私有资产的安全审计过程中,意外发现curl在处理HTTP响应时对%0c
和%0b
序列的解析存在差异。与Burp代理、Python requests库及公开HTTP服务不同,curl将这些字符按字面处理,可能导致CRLF混淆,进而引发头部和Cookie注入。
技术细节
问题发现
在测试某个端点时,发现curl与Burp代理、Python requests库在处理相同HTTP响应时行为不一致。具体而言,curl未正确解析%0c
和%0b
序列,而其他工具则将这些字符视为无效。
示例代码
使用%0c
序列的curl命令:
|
|
响应显示注入的头部被错误解析:
|
|
使用%0c%0b
序列的curl命令:
|
|
响应显示注入的头部被成功解析:
|
|
对比分析
- Burp Suite:响应不同,未解析注入的头部。
- Python requests库:响应不同,未解析注入的头部。
- 公开HTTP服务:响应不同,未解析注入的头部。
安全影响
尽管curl在2012年通过CVE-2012-0036修复了主要的CRLF注入问题(使用%0a%0d
序列),但本次发现的%0c%0b
序列处理不当可能间接导致CRLF混淆,从而允许头部和Cookie注入。由于curl在众多编程语言中广泛使用,此行为可能导致接收HTTP响应时的混淆,进而引发安全风险。
后续讨论
curl开发团队 initially 认为此问题仅是终端输出的视觉 artifact,而非实际安全漏洞。通过进一步测试(包括PHP和Flask环境),最终确认问题仅涉及终端输出格式,不存在安全风险。报告被标记为“不适用”(Not Applicable)。
时间线
- 2024年11月23日:报告提交。
- 2024年11月25日:报告关闭,状态改为“不适用”。
- 2025年7月7日:报告公开披露。
参与人员
- 报告者:mdakh404
- 协作人员:mchklt
- curl团队:bagder, dfandrich
相关信息
- 报告ID:#2861797
- CVE ID:CVE-2012-0036(历史相关漏洞)
- 弱点类型:CRLF注入
- 奖金:无
结论
尽管初始分析认为curl的%0c%0b
序列处理可能导致CRLF混淆和注入漏洞,但最终确认问题仅涉及终端输出格式,无实际安全影响。此报告强调了在安全测试中全面验证终端行为的重要性。