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

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

相关推荐
GuWenyue27 分钟前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006341 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技1 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics2 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1232 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术2 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat2 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC2 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow
触底反弹3 小时前
🔥 2026 大模型选择指南:别再只看 Benchmark 了,这些维度才是关键!
人工智能·面试
神奇霸王龙3 小时前
GB/T 46886 闭环屠夫:5 旗舰多模态 LLM 工业质检实测
人工智能·计算机视觉·ai·开源·ai编程·本地部署