curl漏洞报告:带空格前缀的-H参数与--proxy联用导致HTTP头注入

报告详细描述了curl工具在使用带空格前缀的-H参数与--proxy联用时,会导致HTTP头注入漏洞的技术细节,包括复现步骤、影响范围及潜在风险分析。

curl漏洞报告:带空格前缀的-H参数与–proxy联用导致HTTP头注入

报告人: spongebhav
提交时间: 2024年11月25日
影响版本: curl 8.11.0 (macOS Sequoia 15.1)

漏洞描述

当curl同时使用-H "[space]header:value"--proxy参数时,会导致HTTP头注入到前一个头部字段中。该行为仅在启用代理时出现。

复现步骤

1
2
3
4
curl -X GET "https://example.com" \
-H "Secure-Header: XYZ" \
-H " new-header-that-will-inject-to-previous-header: value" \
--proxy 127.0.0.1:8080

技术细节

  1. 代理依赖:该行为仅在使用--proxy参数时出现
  2. 头部格式要求:注入需要满足"[space]something:value"格式
  3. 协议限制:仅影响HTTPS请求
  4. 文件输入:同样适用于-H @file.txt形式(文件内容以空格开头)

影响分析

  1. 可能导致服务器端错误日志记录
  2. 可能被用于构造畸形请求
  3. 当攻击者能控制输入文件或单个头字段时存在潜在风险

官方回应

curl团队认为这是文档化行为(HTTP/1头部折叠特性),但报告人通过自定义代理测试表明:

  1. 无效头部(如-H "[space]abc")会被curl直接丢弃
  2. 头部拼接行为似乎由curl而非代理实现

相关讨论

报告人提供了Python代理测试代码,证明头部处理行为确实发生在curl层面:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/env python3
import socket
import threading

PROXY_HOST = '127.0.0.1'
PROXY_PORT = 8081

def handle_client(client_socket):
    request = client_socket.recv(4096)
    print("=== HTTP Request Received ===")
    print(request.decode('utf-8', errors='replace'))
    print("=============================")
    client_socket.close()

最终状态

报告被标记为"Not Applicable",但披露以供社区参考。

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