cURL conncache.c 堆缓冲区溢出漏洞分析:指针数组误用导致越界写入

本文分析了cURL库conncache.c文件中的堆缓冲区溢出漏洞,该漏洞源于cpool_bundle结构体错误使用指针数组而非柔性数组,导致memcpy操作时可能越界写入堆内存,可能引发程序崩溃或远程代码执行。

堆缓冲区溢出漏洞报告 #3156384

漏洞概述

在conncache.c文件中,cpool_bundle结构体错误地使用了指针数组(char *dest[1])而非柔性数组(char dest[])来存储字符串数据。这导致在cpool_bundle_create函数中调用memcpy(bundle->dest, dest, bundle->dest_len)时,如果目标字符串长度超过指针大小(64位系统上为8字节),将引发堆缓冲区溢出,造成堆内存损坏。

影响

攻击者可通过提供特定长度的主机名/目标地址触发此漏洞,导致内存损坏,可能引发程序崩溃或远程代码执行。该漏洞影响所有使用连接缓存功能的cURL应用程序,尤其是在处理长主机名时。

修复建议

应将结构体定义改为使用正确的柔性数组:char dest[]char dest[1],并确保内存分配正确考虑字符串长度。

时间线

  • 2025年5月21日 03:55 UTC:freak_coding提交报告。
  • 2025年5月21日 05:30 UTC:curl员工fandrich评论,认为虽然数据类型看起来不正确,但未发现缓冲区溢出。
  • 2025年5月21日 05:53 UTC:curl员工bagder评论,要求提供使用libcurl API或curl命令行工具的复现代码。
  • 2025年5月21日 20:39 UTC:bagder关闭报告,状态改为“不适用”。
  • 2025年6月28日 12:21 UTC:bagder请求披露此报告。
  • 15天前:bagder披露此报告。

报告详情

  • 报告ID:#3156384
  • 严重性:中等(4 ~ 6.9)
  • 披露时间:2025年7月1日 14:08 UTC
  • 弱点类型:堆溢出
  • CVE ID:无
  • 赏金:无

附件

  • test_conncache_overflow.c
  • recording-1747799575976.webm
  • test_conncache_log

注意:curl团队最终认为此问题不存在,并关闭了报告。

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