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

本文详细分析了curl在处理HTTP响应中`%0c%0b`序列时的异常行为,可能导致CRLF混淆、头部和Cookie注入的安全风险,并探讨了其在不同工具中的响应差异及最终确认仅为终端显示问题。

curl处理%0c%0b序列不当导致CRLF混淆与头部/ Cookie注入

报告摘要

该报告由安全研究人员在私有资产的安全审计过程中意外发现。问题源于curl在处理HTTP响应中的%0c0b序列时,与Burp代理、Python的requests库及其他HTTP响应查看服务的行为存在差异。具体表现为,curl将这些序列字面处理,而其他工具则将其视为无效字符。

漏洞细节

问题描述

curl在处理包含%0c%0b序列的HTTP响应时,未正确解析这些字符,导致CRLF(回车换行)混淆。这可能在接收HTTP响应时引发不安全处理,从而允许头部和Cookie注入。

示例代码

使用%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代理:响应不同,未将序列解析为CRLF。
  • Python requests库:响应不同,未将序列解析为CRLF。
  • 公共HTTP响应查看服务:响应不同,未将序列解析为CRLF。

影响

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

后续讨论与结论

curl开发团队初步认为该问题仅是终端显示的艺术效果,而非实际安全漏洞。通过进一步测试,研究人员在PHP和Flask环境中验证后确认,该问题确实仅为终端输出格式问题,不存在安全风险。报告最终被关闭,状态设为“不适用”。

时间线

  • 2024年11月23日:报告提交。
  • 2024年11月25日:报告关闭,确认为终端显示问题。
  • 2025年7月7日:报告公开披露,以符合项目透明度政策。

相关CVE

  • CVE-2012-0036:curl早期CRLF注入漏洞(已修复)。

参与者

  • 报告者:mdakh404
  • 合作者:mchklt
  • curl团队:bagder, dfandrich

状态

  • 严重性:无评级
  • 奖金:无
  • 披露时间:2025年7月7日

该报告强调了在安全测试中工具行为差异的重要性,并最终确认curl的该行为不构成安全威胁。

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