Node-tar竞争条件漏洞导致未初始化内存泄露
漏洞概述
Node-tar库7.5.1版本存在竞争条件漏洞,当使用.t(即.list)方法并设置{ sync: true }选项读取tar条目内容时,如果在读取过程中磁盘上的tar文件被更改为较小尺寸,可能返回未初始化的内存内容。
技术细节
漏洞成因
- 回归发生在commit isaacs/node-tar@5330eb0
- 仅影响使用
sync: true选项的tar.list/tar.t方法 - 仅影响7.5.1版本,早期版本不受影响
攻击场景
攻击者必须在tar存档文件大小通过stat读取后,tar存档解析器到达被截断的条目之前,将文件大小减少到tar头部和主体块之间的边界。如果文件在不同的边界被截断,未初始化数据很可能不是有效的tar条目,导致解析器将条目视为损坏的存档。
影响范围
- 信息泄露:暴露进程内存,可能包含不相关的文件内容、环境变量、密码等敏感信息
- 拒绝服务:如果tar文件初始大小超过opt.maxReadSize(默认16kb),程序将进入无限循环,导致DoS而非信息泄露
漏洞验证
概念验证代码
攻击脚本A:
|
|
漏洞利用脚本B:
|
|
缓解措施
受影响版本
- 受影响版本:= 7.5.1
- 已修复版本:7.5.2
限制条件
- 需要攻击者能够截断(或诱导截断/替换)磁盘上的文件(例如在缓存中)
- 默认情况下,
tar.list不处理tar存档条目主体内容 - 需要用户代码在
onReadEntry方法中对tar条目文件内容执行某些操作
不受影响的方法
- 该库中的其他方法(
tar.extract等)不受此漏洞影响
安全评分
CVSS v4评分
- 总体评分:6.1(中等严重性)
- 攻击向量:本地
- 攻击复杂度:高
- 机密性影响:高
- 完整性影响:低
- 可用性影响:低
EPSS评分
- 被利用概率:0.014%(30天内)
参考链接
- 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
弱点分类
- CWE-362:使用共享资源的并发执行与不当同步(竞争条件)
该漏洞由ChALkeR报告,已在node-tar 7.5.2版本中修复。