IPBUF安全漏洞报告
English
CVE-2026-9545 CVSS 7.5 高危

CVE-2026-9545:libcurl HTTP/3 SSL会话缓存导致敏感信息泄露

披露日期: 2026-07-03
来源: 2499f714-1537-4658-8207-48ae4bb9eae9

漏洞信息

漏洞编号
CVE-2026-9545
漏洞类型
信息泄露/SSL/TLS证书验证绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
libcurl (curl)

相关标签

libcurlcurlHTTP/3QUICTLSSSL信息泄露证书验证绕过中间人攻击0-RTT

漏洞概述

CVE-2026-9545是libcurl中存在的一个高危安全漏洞,CVSS评分为7.5。该漏洞与HTTP/3连接中的SSL会话缓存和TLS早期数据(Early Data)功能相关。当libcurl使用HTTP/3协议与服务器进行通信时,如果启用了SSL会话缓存(未禁用CURLOPT_SSL_SESSIONID_CACHE选项)并且设置了TLS早期数据选项(CURLSSLOPT_EARLYDATA位于CURLOPT_SSL_OPTIONS中),在特定条件下libcurl可能会在第二次连接到同一主机时,在证书验证失败的情况下仍然发送请求数据,导致敏感信息泄露给攻击者的伪造服务器。该漏洞的利用场景需要攻击者能够拦截和替换合法的HTTP/3服务器连接,属于中间人攻击的一种变体。漏洞的机密性影响为高,完整性和可用性不受影响。该漏洞由安全研究员通过HackerOne平台报告,curl官方已发布相应的安全公告和修复版本。

技术细节

该漏洞的核心问题在于libcurl对HTTP/3连接的SSL会话缓存和TLS 0-RTT早期数据功能的处理逻辑存在缺陷。具体技术原理如下:

1. **SSL会话缓存机制**:libcurl默认会缓存SSL/TLS会话,以便在后续连接中复用,减少握手开销。这通过CURLOPT_SSL_SESSIONID_CACHE选项控制。

2. **TLS早期数据(0-RTT)**:当启用CURLSSLOPT_EARLYDATA选项时,libcurl允许在TLS握手完成前发送应用数据(即0-RTT数据),以降低连接延迟。

3. **漏洞触发流程**:
- 客户端首先与合法的HTTP/3服务器建立连接并完成TLS握手
- SSL会话被缓存到本地
- 客户端发起第二次连接到同一主机名
- 攻击者在此时替换目标服务器(中间人攻击),但没有有效的TLS证书
- libcurl尝试复用缓存的SSL会话并发送早期数据
- 由于早期数据是在TLS握手完全验证之前发送的,libcurl可能在证书验证失败之前就已经将请求数据发送出去
- 攻击者接收到这些未经验证连接就发送的敏感数据

4. **根本原因**:libcurl在发送早期数据时没有正确处理证书验证失败的时序问题,导致在证书验证完成前数据已经被发送到伪造的服务器。

该漏洞的利用需要攻击者具备网络中间人能力(如控制路由器、DNS劫持等),但不需要认证或用户交互。

攻击链分析

STEP 1
步骤1:建立合法连接
客户端使用HTTP/3协议与合法服务器建立TLS连接,完成SSL握手,SSL会话被本地缓存用于后续连接复用。
STEP 2
步骤2:中间人攻击替换服务器
攻击者在网络层面执行中间人攻击(MITM),将合法服务器替换为没有有效TLS证书的伪造服务器。
STEP 3
步骤3:客户端发起第二次请求
客户端对同一主机名发起第二次传输请求,libcurl复用缓存的SSL会话并启用TLS早期数据(0-RTT)。
STEP 4
步骤4:证书验证前发送数据
libcurl在TLS握手完全验证证书之前就将请求数据(包括Authorization头、POST body等敏感信息)发送到伪造服务器。
STEP 5
步骤5:敏感信息泄露
攻击者接收到包含敏感数据的请求,虽然最终证书验证失败,但数据已经被泄露,造成机密性损失。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2026-9545 PoC - Demonstrates the vulnerability concept This PoC simulates the attack scenario where an attacker intercepts HTTP/3 connections and exploits SSL session caching with early data. Note: This is a conceptual PoC. Actual exploitation requires: - Network MITM capability (e.g., ARP spoofing, DNS hijacking) - A rogue HTTP/3 server without valid TLS certificate - A vulnerable libcurl client with specific options enabled """ import socket import ssl import struct # Vulnerable libcurl configuration that triggers CVE-2026-9545 VULNERABLE_CURL_OPTIONS = { "CURLOPT_SSL_SESSIONID_CACHE": 1, # Enabled (default) "CURLOPT_SSL_OPTIONS": "CURLSSLOPT_EARLYDATA", # Early data enabled "CURLOPT_HTTP_VERSION": "CURL_HTTP_VERSION_3", # HTTP/3 } def simulate_attack_scenario(): """ Simulates the attack chain: 1. Legitimate HTTP/3 connection establishes SSL session 2. Attacker replaces the server 3. Client reuses cached session with early data 4. Sensitive data leaks before cert verification fails """ print("[*] CVE-2026-9545 Attack Simulation") print(f"[*] Vulnerable options: {VULNERABLE_CURL_OPTIONS}") # Step 1: Establish legitimate connection print("[+] Step 1: Client connects to legitimate HTTP/3 server") print(" -> TLS handshake completes successfully") print(" -> SSL session cached for reuse") # Step 2: Attacker intercepts print("[+] Step 2: Attacker performs MITM, replaces server") print(" -> Rogue server has NO valid TLS certificate") # Step 3: Client attempts reconnection print("[+] Step 3: Client initiates second transfer to same host") print(" -> libcurl reuses cached SSL session") print(" -> Early data (0-RTT) sent BEFORE cert verification") # Step 4: Data leakage print("[+] Step 4: Sensitive request data sent to attacker's server") print(" -> Certificate verification fails AFTER data is sent") print(" -> Confidential information compromised!") print("\n[!] Vulnerability confirmed: sensitive data leaked before cert validation") def vulnerable_curl_command(): """ Command that would trigger the vulnerability with a vulnerable libcurl version. """ cmd = ( 'curl -V # Check if libcurl version is vulnerable\n' '# Vulnerable usage pattern:\n' 'curl --http3-only \\\n' ' --ssl-allow-earlydata \\\n' ' https://target.example.com/api/sensitive-endpoint \\\n' ' -H "Authorization: Bearer SECRET_TOKEN" \\\n' ' -d \'{"password": "PASSWORD123"}\'\n\n' '# The second request to the same host (after MITM) will leak data\n' '# before certificate verification failure is enforced' ) return cmd if __name__ == "__main__": simulate_attack_scenario() print("\n" + "="*60) print("Vulnerable curl command pattern:") print("="*60) print(vulnerable_curl_command())

影响范围

libcurl >= 8.0.0 且 < 8.15.0(使用HTTP/3且启用SSL会话缓存和早期数据时受影响)
curl 8.x 系列中启用HTTP/3和TLS早期数据的版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)禁用SSL会话缓存功能,设置CURLOPT_SSL_SESSIONID_CACHE为0;2)禁用TLS早期数据(0-RTT)功能,不设置CURLSSLOPT_EARLYDATA位;3)避免在不可信网络环境中使用HTTP/3协议进行敏感数据传输;4)实施网络层面的防护措施,检测和阻止中间人攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表