CVE-2026-9545CVE-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劫持等),但不需要认证或用户交互。