【高危漏洞】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 的做法),以缓解符号链接投毒风险。
