GnuTLS类型混淆漏洞分析:CURLINFO_TLS_SESSION与CURLINFO_TLS_SSL_PTR错误返回

本文详细分析了curl库中GnuTLS后端在处理CURLINFO_TLS_SESSION和CURLINFO_TLS_SSL_PTR时出现的类型混淆漏洞,包括漏洞成因、影响范围、修复方案及实际安全风险评估。

GnuTLS CURLINFO_TLS_SESSION / CURLINFO_TLS_SSL_PTR类型混淆漏洞报告

漏洞概述

在curl库的GnuTLS后端实现中,curl_easy_getinfo函数在处理CURLINFO_TLS_SESSIONCURLINFO_TLS_SSL_PTR时存在类型混淆漏洞。具体表现为:即使使用GnuTLS后端,相关函数仍错误返回CURLSSLBACKEND_OPENSSL值。

技术细节

漏洞代码位置

漏洞位于源代码文件: lib/vquic/vquic-tls.c#L211

1
2
3
4
5
#elif defined(USE_GNUTLS)
  (void)give_ssl_ctx; /* gnutls always returns its session */
  info->backend = CURLSSLBACKEND_OPENSSL;  // 错误赋值
  info->internals = ctx->gtls.session;
  return TRUE;

问题分析

  1. 类型混淆:当调用方根据backend字段值进行动态决策时,会将gnutls_session_t类型错误解析为SSL_CTXSSL类型
  2. 潜在影响:错误指针传递给OpenSSL函数可能导致崩溃或其他未知影响,具体取决于应用程序代码和调用的函数

受影响版本

  • curl 8.15.0

复现步骤

  1. 构建同时链接GnuTLS和OpenSSL的应用程序
  2. 应用程序使用curl_easy_getinfo获取CURLINFO_TLS_SESSIONCURLINFO_TLS_SSL_PTR
  3. 当检测到info->backend == CURLSSLBACKEND_OPENSSL时调用OpenSSL函数

缓解因素

  • 需要应用程序同时链接GnuTLS和OpenSSL(较为罕见)
  • HTTP/3不支持多SSL后端,降低了实际影响
  • 漏洞更可能表现为常规bug而非安全漏洞

修复情况

  • 已通过PR #17976修复
  • curl团队确认该问题更可能造成功能异常而非安全风险

时间线

  • 2025年7月20日:漏洞报告提交
  • 2025年7月20日:确认并开始调查
  • 2025年7月20日:提供修复方案
  • 2025年7月21日:确认为常规bug而非安全漏洞
  • 2025年7月23日:报告公开披露

风险评估

该漏洞被评估为非安全漏洞,主要原因为:

  • 需要极其特殊的配置环境(同时使用GnuTLS和OpenSSL)
  • HTTP/3不支持多SSL后端架构
  • 实际安全影响极为有限

状态:Not Applicable(不适用安全漏洞) CVE ID:无 赏金:无

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