cURL变量管理中的缓冲区越界读取漏洞分析

漏洞概述

在cURL的addvariable()函数(由setvariable()调用)中,代码为p->name分配内存时未为NUL终止符预留空间,直接复制nlen字节。随后,varcontent()等函数对此名称调用strlen(),假设其为NUL终止,这可能导致越界内存读取,造成程序崩溃(DoS)或潜在信息泄露。

源代码分析

问题代码位置 :https://github.com/curl/curl/blob/master/src/var.c

c 复制代码
p = calloc(1, sizeof(struct tool_var) + nlen);
if(p) {
  memcpy(p->name, name, nlen);
}

数据结构定义:

c 复制代码
struct tool_var {
  struct tool_var *next;
  const char *content;
  size_t clen; /* content长度 */
  char name[1]; /* 作为结构体的一部分分配 */
};

复现步骤

  1. 克隆仓库并进入目录

    bash 复制代码
    git clone https://github.com/curl/curl.git
    cd curl
    CFLAGS="-fsanitize=address,undefined -g -O1" ./configure
    make -j$(nproc)
  2. 通过setvariable()添加变量(例如:"TESTVAR=value")

  3. 使用varcontent()或varexpand()查找变量

  4. 通过ASAN/UBSAN日志观察崩溃或越界读取

影响评估

addvariable()未能对存储的变量名进行NUL终止,因此后续对strlen()的调用可能读取超出分配缓冲区的内存,导致程序立即崩溃。这会产生可用性影响(如果代码路径可访问,容易造成DoS),且越界读取可能暴露相邻内存,造成潜在的机密性问题。

项目方回应

cURL开发团队指出代码实际上是安全的,因为:

  • name[1]大小为1字节
  • 使用calloc分配结构体大小加上名称长度时,分配的最后一个字节在memcpy后保持为零

开发团队已添加注释以帮助后续代码阅读者理解:github.com/curl/curl/p...

报告状态

  • 状态:不适用(Not Applicable)
  • 严重性:无评级
  • CVE ID:无
  • 赏金:无
  • 披露时间:2025年10月31日 11:35 UTC

报告最终被认定为非安全问题,但按照项目透明度政策被公开披露。

相关推荐
YFJ_mily2 分钟前
11.10最终投稿截止|SPIC2026第四届信号处理与智能计算|连续两届EI&Scopus双检索 IEEE官方收录
人工智能·信号处理·智能计算·rdlink研发家·往届会议历史·沈阳理工大学主办·广东工业大学主办
土星云SaturnCloud3 分钟前
土星云智慧服务区方案:AI视觉+边缘计算+视频存管一体化的全场景智能化落地解析
服务器·人工智能·ai·边缘计算
hsfxuebao12 分钟前
Agent 可观测性基石:OpenTelemetry 学习与实践
人工智能
Python大数据分析@12 分钟前
通过 MCP 实现 AI Agent自动化数据采集
运维·人工智能·爬虫·自动化
u13013016 分钟前
GitHub 热榜项目:日榜(2026-10-15)
人工智能·github
商业白皮书17 分钟前
人形机器人公司打算依托云端 GPU 资源扩充模型训练规模
人工智能·深度学习·机器人
hey you~21 分钟前
2026年大模型语音机器人知识库导入与调优全指南:从切分到重排序的7个关键步骤
人工智能·机器人·语音识别·向量检索·rag·知识库导入·知识库调优
ch62329 分钟前
《AI 辅助编程实战:从零跑通一个 Excel 报表生成脚本的踩坑与复盘》
人工智能·python
云边云科技_云网融合30 分钟前
持续深化合作 | 云边云科技再次通过亚马逊云科技的能力认证
人工智能·科技
Joy T32 分钟前
Agent 上线前怎么评测:从完成标准、离线测试集到 Trace 回归
人工智能·trace·eval·回归测试