curl处理HTTP响应中`%0c%0b`序列不当导致CRLF混淆与头部注入漏洞分析

本文详细分析了curl在处理HTTP响应中`%0c%0b`序列时存在的安全问题,可能导致CRLF混淆、头部注入和Cookie注入漏洞,尽管最终确认为终端显示问题而非实际安全威胁。

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将%0c%0b序列按字面意义处理,而不考虑Web服务器对这些字符的响应方式。虽然目标资产对CRLF注入有良好防护,无法使用常见的%0a%0b序列注入头部/ Cookie,但curl对%0c序列的异常响应导致了潜在的安全问题。

示例代码

1
2
3
4
5
6
7
8
9
# 使用%0c序列的curl请求
curl "https://private.asset:8100/sap/public/bc/icf/logoff?redirecturl=//google.com/%0cX-Injected-Header:%20test" -I

# 响应显示头部注入
HTTP/1.1 302 Moved temporarily
content-type: text/html; charset=utf-8
content-length: 17
location: //google.com/
                       X-Injected-Header: test

对比测试

  • Burp代理:响应不同
  • Python requests库:响应不同
  • 公共HTTP响应查看服务:响应不同

安全影响

  • CRLF混淆
  • 头部注入
  • Cookie注入

历史背景

curl在2012年通过CVE-2012-0036修复了主要的CRLF问题(使用%0a%0d序列),但此报告描述的漏洞可能间接使CRLF攻击再次成为可能。

后续讨论

curl开发团队最初认为这只是终端显示问题,而非实际安全漏洞。通过进一步测试发现,%08(退格字符)和%0c(换页字符)在终端中的显示效果造成了视觉混淆,但并未实际注入数据。

最终结论

经过在PHP和Flask环境中的测试,确认该问题仅为终端输出显示问题,不存在实际安全威胁。报告状态被标记为"不适用"。


报告ID: #2861797
报告时间: 2024年11月23日
研究人员: mdakh404, mchklt
相关CVE: CVE-2012-0036
状态: 已披露(2025年7月7日)

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