堆缓冲区溢出漏洞报告 #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团队最终认为此问题不存在,并关闭了报告。