【高危漏洞】CVE-2026-23950:node-tar 路径竞争条件导致任意文件覆盖

漏洞概述

node-tar 是一个用于 Node.js 的 tar 文件处理库。在 7.5.3 及更早版本中,该库在处理 Unicode 路径时存在竞争条件漏洞。由于其 path-reservations 系统未能正确处理在大小写不敏感或 Unicode 标准化不敏感的文件系统(如 macOS 的 APFS/HFS+)上的路径冲突(例如 ßss),攻击者可利用此问题绕过内部并发控制机制,实施符号链接投毒(Symlink Poisoning)攻击,从而实现任意文件覆盖。

漏洞详情

  • CVE 编号:CVE-2026-23950
  • 漏洞类型:竞争条件(Race Condition)、符号链接投毒、任意文件覆盖
  • CVSS 评分:8.8(HIGH)
    CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:L
  • 影响版本:node-tar ≤ 7.5.3

影响范围

该漏洞主要影响在 macOS(使用 APFS 或 HFS+ 文件系统)上运行 node-tar 的用户和系统。由于这些文件系统对 Unicode 标准化不敏感(例如将 ßss 视为相同路径),而 node-tar 原先使用 NFD 标准化方式,导致路径冲突未被正确识别和锁定,从而引发竞争条件。其他对 Unicode 处理行为类似的文件系统也可能受影响。

风险分析

攻击者可构造恶意 tar 归档文件,其中包含具有 Unicode 冲突名称的符号链接和普通文件。当受害者使用易受攻击版本的 node-tar 解压该归档时,由于路径锁机制失效,可能导致符号链接在目标路径被创建后被覆盖,进而将任意文件写入系统任意位置(需满足解压目录权限)。这可能造成配置文件篡改、代码注入、权限提升等严重后果。虽然攻击需要用户交互(如手动解压或程序自动处理不可信 tar 包),但结合供应链攻击或恶意 npm 包,风险显著。

修复建议

  • 立即升级 node-tar 至 7.5.4 或更高版本。该版本通过在 path-reservations.js 中采用与目标文件系统行为一致的 Unicode 标准化方式(如 NFKD),并结合 toLocaleLowerCase('en')toLocaleUpperCase('en') 来确保路径唯一性,从而修复该问题。
  • 若无法立即升级,建议在程序中使用 node-tar 解压不可信 tarball 时,主动过滤掉所有 SymbolicLink 类型的条目(参考 npm 的做法),以缓解符号链接投毒风险。

参考链接