cURL整数溢出漏洞安全分析报告

本报告详细分析了cURL库中HTTP分块编码存在的整数溢出漏洞。通过代码片段和Python测试服务器演示了漏洞触发条件,包括内存损坏、缓冲区溢出和拒绝服务等潜在影响。报告最终确认该漏洞因cURL内置检查机制而无法实际利用。

安全分析报告:cURL整数溢出漏洞

漏洞概述

漏洞类型:HTTP分块编码中的整数溢出
源代码位置

  • lib/http_chunks.c(第173行)
  • lib/curlx/strparse.c(第185-186行)

影响

  • 整数溢出导致内存损坏
  • 可能引发缓冲区溢出
  • 造成cURL拒绝服务(DoS)
  • 在受控条件下可能存在信息泄露风险

问题代码片段

1
2
3
4
5
6
7
8
9
// http_chunks.c 第173行
if(curlx_str_hex(&p, &ch->datasize, CURL_OFF_T_MAX)) {
    // 错误处理
}

// strparse.c 第185-186行
if(num > ((max - n) / base))
    return STRE_OVERFLOW;
num = num * base + n;

问题描述
max = CURL_OFF_T_MAX (0x7FFFFFFFFFFFFFFF)时,溢出检查可能被绕过。这允许num值超过最大值而不触发溢出保护,导致cURL处理分块响应时出现内存损坏。

测试环境搭建

Python测试服务器模拟漏洞行为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python3
import socket
import threading

def create_test_response():
    overflow_chunk_size = "7FFFFFFFFFFFFFFFF"
    html_content = "<html><body><h1>Overflow Test Page</h1><p>If you see this, curl continued reading.</p></body></html>"
    
    response = (
        "HTTP/1.1 200 OK\r\n"
        "Transfer-Encoding: chunked\r\n"
        "Content-Type: text/html\r\n"
        "Connection: close\r\n"
        "\r\n"
        f"{overflow_chunk_size}\r\n"
        "VULNERABILITY_PROOF_DATA\r\n"
        f"{len(html_content):X}\r\n"
        f"{html_content}\r\n"
        "0\r\n"
        "\r\n"
    )
    return response.encode()

# ... 服务器处理代码(完整实现见原文)

测试结果

使用17位十六进制值测试

1
2
└─$ curl http://127.0.0.1:8080
curl: (56) chunk hex-length longer than 16

使用16位十六进制值测试

1
2
3
4
5
6
└─$ curl http://127.0.0.1:8080
VULNERABILITY_PROOF_DATA
64
<html><body><h1>Overflow Test Page</h1><p>If you see this, curl continued reading.</p></body></html>
0
curl: (18) transfer closed with outstanding read data remaining

后续进展

报告提交者后续澄清:

  • 发现PoC中使用了无效的分块大小表示(如17位十六进制值)
  • cURL正确拒绝了无效输入(错误56:分块十六进制长度超过16位)
  • 使用16位十六进制值虽产生异常行为,但无法证明存在可靠远程利用
  • 最终确认为误报,cURL解析器包含有效的防护检查

项目方处理

  • 状态标记为"不适用"(Not Applicable)
  • 确认为非安全问题
  • 根据项目透明政策公开披露报告

时间线

  • 报告日期:2025年9月17日
  • 披露日期:2025年9月18日
  • 严重程度:未评级
  • CVE编号:无
  • 奖金:无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计