Node-tar竞争条件漏洞导致未初始化内存泄露
漏洞详情
包信息
- 包名: tar (npm)
- 受影响版本: = 7.5.1
- 修复版本: 7.5.2
漏洞描述
摘要
使用.t(即.list)方法配合{ sync: true }选项读取tar条目内容时,如果在读取过程中tar文件在磁盘上被更改为较小尺寸,将返回未初始化的内存内容。
详细说明
- isaacs/node-tar#445
- isaacs/node-tar#446
回归发生在commit isaacs/node-tar@5330eb0
概念验证
攻击脚本A:
|
|
易受攻击脚本B:
|
|
在Node.js 22或>=25.1.0上并行运行A和B,等待一段时间即可观察到文本数据的内存转储。
影响分析
- 暴露进程内存,可能导致意外处理敏感数据而非tar条目内容
- 未初始化内存可能包含不相关的文件内容、环境变量、密码等
- 攻击者必须在tar存档文件大小通过stat读取后,tar存档解析器到达被截断的条目之前,将文件大小减少到tar头部和主体块之间的边界
利用条件
- 必须使用
sync: true选项调用tar.list/tar.t方法 - 仅影响7.5.1版本(早期版本不受影响)
- 攻击者需要能够截断(或诱导截断/替换)磁盘上的文件
- 如果tar文件初始大小大于
opt.maxReadSize(默认为16kb),则不会向用户代码暴露未初始化内存,而是导致程序进入无限循环,造成DoS而非信息泄露漏洞
其他说明
- 默认情况下,
tar.list不处理tar存档条目主体内容 - 此漏洞进一步依赖于用户代码在
onReadEntry方法中对tar条目文件内容执行某些操作 - 此库中的其他方法(如
tar.extract等)不受此漏洞影响
参考链接
- GHSA-29xp-372q-xqph
- isaacs/node-tar#445
- isaacs/node-tar#446
- isaacs/node-tar@5e1a8e6
- https://nvd.nist.gov/vuln/detail/CVE-2025-64118
- isaacs/node-tar@5330eb0
安全指标
CVSS评分
- 总体评分: 6.1(中等严重性)
CVSS v4基础指标
- 攻击向量: 本地
- 攻击复杂度: 高
- 攻击要求: 存在
- 所需权限: 低
- 用户交互: 被动
弱点分类
- CWE-362: 使用共享资源的并发执行与不当同步(竞争条件)
元数据
- CVE ID: CVE-2025-64118
- GHSA ID: GHSA-29xp-372q-xqph
- 源代码: isaacs/node-tar
- 报告者: ChALkeR
- 发布时间: 2025年10月30日
- 最后更新: 2025年10月30日