漏洞报告概述
报告ID: #3406123
漏洞类型: 缓冲区越界读取
提交者: sagorhawlader
提交时间: 15天前
技术细节
问题描述
在addvariable()函数(被setvariable()使用)中,代码为p->name分配内存时没有为null终止符预留空间,直接复制nlen字节。随后,varcontent()等函数在此name上调用strlen(),假设它是null终止的。这可能导致越界内存读取,造成程序崩溃(DoS)或潜在信息泄露,具体取决于运行时上下文。
受影响代码
源代码文件:https://github.com/curl/curl/blob/master/src/var.c
问题代码段:
|
|
复现步骤
-
克隆仓库并进入目录
1 2 3 4git clone https://github.com/curl/curl.git cd curl CFLAGS="-fsanitize=address,undefined -g -O1" ./configure make -j$(nproc) -
通过
setvariable()添加变量(例如"TESTVAR=value") -
使用
varcontent()或varexpand()查找变量 -
通过ASAN/UBSAN日志观察崩溃或越界读取
安全影响
addvariable()未能对存储的变量名进行NUL终止,因此后续对strlen()的调用可能读取超出分配缓冲区的内存,导致程序立即崩溃。这会产生可用性影响(如果代码路径可达则容易造成DoS),且越界读取可能暴露相邻内存,造成潜在的机密性问题。
项目方回应
技术分析
cURL开发团队指出代码实际上是安全的,关键点在于tool_var结构体的设计:
|
|
核心解释:name[1]大小为1字节。当代码使用calloc分配结构体大小加上名称长度时,在memcpy之后,该分配的最后一个字节保持为零(由于calloc的零初始化特性)。
解决方案
开发团队添加了注释以帮助后续阅读此代码的人员:https://github.com/curl/curl/pull/19287
最终状态
- 状态: 不适用(Not Applicable)
- 严重性: 无评级
- CVE ID: 无
- 赏金: 无
- 披露时间: 2025年10月31日 11:35 UTC
报告最终被确认为误报,但按照项目透明性政策,所有报告都被公开披露。