OpenSSL HTTP/3漏洞分析:CURLINFO_TLS_SSL_PTR指针错误导致的潜在RCE风险

本文详细分析了curl_easy_getinfo CURLINFO_TLS_SSL_PTR在OpenSSL HTTP/3连接中返回无效SSL指针的问题,可能导致程序崩溃甚至远程代码执行。

OpenSSL HTTP/3漏洞分析

漏洞概述

curl_easy_getinfoCURLINFO_TLS_SSL_PTR在OpenSSL HTTP/3连接中返回了无效的SSL连接指针。使用此SSL连接会导致崩溃,并可能产生其他影响。

受影响版本

  • 8.15.0 (release)
  • 8.15.1-DEV (7c23e88d17e0939b4e01c8d05f430e167e148f4b)

复现步骤

  1. 使用OpenSSL 3.5.1编译libcurl,并配置足够新的nghttp2、nghttp3和ngtcp2

    1
    
    --with-openssl --with-nghttp2 --with-ngtcp2 --with-nghttp3
    
  2. 使用地址消毒剂编译PoC应用:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    #include <curl/curl.h>
    #include <openssl/ssl.h>
    #include <stdio.h>
    
    static size_t header_callback(char *buffer, size_t size,
                                  size_t nitems, void *userdata)
    {
      // 回调函数实现
    }
    
    int main(void)
    {
      // 主函数实现
    }
    

漏洞影响

最低影响:访问HTTP/3站点时导致拒绝服务
潜在影响:如果返回的指针指向已释放的内存,可能导致内存损坏。根据目标平台不同,可能实现远程代码执行。

技术分析

漏洞源于将OpenSSL不透明指针错误地指向了另一个OpenSSL对象。这个错误是在libcurl 8.15.0中引入的,仅影响HTTP/3连接。

攻击者需要满足以下条件才能利用此漏洞:

  1. 应用程序使用此回调
  2. 加载与应用程序共享堆的恶意代码
  3. 能够以特定方式操作堆
  4. 触发应用程序执行HTTP/3请求并在堆设置完全符合预期时触发此回调

修复方案

GitHub上已提交修复PR:curl/curl#18066

时间线

  • 2025-07-20 漏洞报告提交
  • 2025-07-28 漏洞公开披露
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计