curl处理HTTP响应中的`%0c%0b`序列不当导致CRLF混淆及头部/ Cookie注入漏洞

本文详细分析了curl在处理HTTP响应时对`%0c%0b`序列的错误解析,导致CRLF混淆、头部和Cookie注入的安全问题。通过对比Burp Suite、Python requests库及公开HTTP服务的响应差异,揭示了潜在的安全风险。

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命令:

1
curl "https://private.asset:8100/sap/public/bc/icf/logoff?redirecturl=//google.com/%0cX-Injected-Header:%20test" -I

响应显示注入的头部被错误解析:

1
2
3
4
5
HTTP/1.1 302 Moved temporarily
content-type: text/html; charset=utf-8
content-length: 17
location: //google.com/
                       X-Injected-Header: test

使用%0c%0b序列的curl命令:

1
curl "https://private.asset:8100/sap/public/bc/icf/logoff?redirecturl=//google.com/%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%0cX-Header-Injection:%20test" -I

响应显示注入的头部被成功解析:

1
2
3
4
5
HTTP/1.1 302 Moved temporarily
content-type: text/html; charset=utf-8
content-length: 17
location: //google.com/
X-Header-Injection: test

对比分析

  • 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混淆和注入漏洞,但最终确认问题仅涉及终端输出格式,无实际安全影响。此报告强调了在安全测试中全面验证终端行为的重要性。

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