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

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

相关推荐
大模型真好玩2 分钟前
一文详解2026年技术圈最火概念——Agent Engineering智能体工程
人工智能·langchain·agent
人工智能AI技术8 分钟前
美团“问小团”同款架构:C# + ASP.NET Core 搭建本地生活 AI 搜索
人工智能·c#
无心水13 分钟前
【OpenClaw:实战部署】10、OpenClaw自动化调度——打造7x24小时无人值守AI工作流
人工智能·ai·ai工作流·openclaw·openclaw·三月创作之星·养龙虾
十字花20 分钟前
【CVPR 2025】SET:Spectral Enhancement for Tiny Object Detection
论文阅读·人工智能·目标检测·计算机视觉
湘美书院--湘美谈教育23 分钟前
湘美谈教育精英智能实验室:当萨特遇上AI,跨存在对话
人工智能·深度学习·神经网络·机器学习·ai写作
我材不敲代码33 分钟前
OpenCV 实战——图像形态学操作与边缘检测全解析:从腐蚀膨胀到 Canny 边缘检测
人工智能·opencv·计算机视觉
芯片-嵌入式35 分钟前
具身智能(2):OpenExplorer下的模型量化
人工智能·深度学习·算法
DamianGao35 分钟前
我用 OpenClaw 做了一个 AI 新闻早报,每天自动推送
人工智能·python·语言模型
Lab_AI37 分钟前
电子实验记录本(ELN)助力熙华药业核心竞争力提升
大数据·人工智能·实验室管理·eln·药物研发·ai制药·电子实验记录本
崔高杰41 分钟前
训练数据选择又有新方法了?——两篇文章的阅读笔记 Less is Enough和 OPUS
人工智能·笔记·机器学习