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 分钟前
非编程背景学习AI的方法
人工智能
北京耐用通信5 分钟前
不换设备、不重写程序:耐达讯自动化网关如何实现CC-Link IE转Modbus TCP的高效互通?
人工智能·科技·物联网·网络协议·自动化·信息与通信
计算机毕业设计指导6 分钟前
基于机器学习和深度学习的恶意WebURL检测系统实战详解
人工智能·深度学习·机器学习·网络安全
珂朵莉MM7 分钟前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--多策略混合算法
人工智能·算法
GlobalInfo9 分钟前
2026-2032全球AI服务器连接器市场洞察:规模、竞争与趋势深度解析
人工智能
Elastic 中国社区官方博客13 分钟前
使用 Jina-VLM 小型多语言视觉语言模型来和图片对话
大数据·人工智能·elasticsearch·语言模型·自然语言处理·jina
罗西的思考14 分钟前
【OpenClaw】通过 Nanobot 源码学习架构---(6)Skills
人工智能·深度学习·算法
uzong14 分钟前
软件人员可以关注的 Skill,亲测确实不错,值得试一下
人工智能·后端
Bigger14 分钟前
第一章:我是如何剖析 Claude Code 整体架构与启动流程的
前端·aigc·claude
志栋智能15 分钟前
超自动化巡检:实现运维“事前预防”的关键拼图
大数据·运维·网络·人工智能·机器学习·自动化