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

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

相关推荐
T型码农要学习6 小时前
开源项目5|FileBrowser:免费在线文件管理器!随时随地管控服务器文件
运维·服务器·人工智能·开源
智恒百亿6 小时前
8 卡 RTX 5090 服务器深度实测:256GB 显存能否支撑 70B 模型微调?选型参考
大数据·运维·服务器·人工智能
ai小陈8 小时前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
测试者家园10 小时前
为什么意图驱动测试是自动化测试的下一站,而不是替代品
自动化测试·软件测试·人工智能·持续测试·ai赋能·智能化测试·软件测试变革
麦麦麦造10 小时前
OpenAI 放弃的Atlas浏览器,转生到 GPT 6 Astra上了
aigc·openai
D2020202011 小时前
TikTok Shop禁止AI语音直播落地后,跨境卖家如何通过达秘合规调整带货内容
人工智能
像风一样自由202011 小时前
20.Milvus常见问题检索不到维度错误和数据一致性
人工智能·大模型·milvus
现代野蛮人11 小时前
【深度学习实验】—— 基于 LSTM 与 Optuna 调参的丙型肝炎预测
人工智能·深度学习·lstm
支支დ11 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
ZGIAI12 小时前
ZGI 让那些"等你去处理"的事,真正跑起来
人工智能·架构