Jvr2022/CVE-2026-29786

GitHub: Jvr2022/CVE-2026-29786

演示 node-tar 包中硬链接路径遍历漏洞的概念验证,该漏洞允许通过特制 tar 存档覆盖解压目录外的文件。

Stars: 1 | Forks: 0

# CVE-2026-29786 **研究:** [Joshua van Rijswijk](https://github.com/Jvr2022) ## 描述 本仓库包含 **CVE-2026-29786** 的 **概念验证**,这是 `tar` npm 包中的一个漏洞,允许精心构造的存档创建一个**指向预期解压目录之外的硬链接**。 该问题发生在 tar 存档包含**驱动器相对链接目标**(例如 `C:../target.txt`)时。由于库在解压过程中执行验证和路径规范化的顺序问题,路径遍历保护机制可以被绕过。 经过规范化后,路径变为 `../target.txt`,允许链接目标逃离配置的解压目录。 当写入被解压的文件时,外部文件会被修改,因为两个路径引用的是同一个硬链接。 ## 漏洞详情 该漏洞发生在负责处理绝对路径的解压逻辑中(`Unpack[STRIPABSOLUTEPATH]`)。 遍历检测是在绝对路径剥离**之前**执行的。 恶意标头值示例 `linkpath: C:../target.txt` 处理行为: 1. 路径被分割为多个段以进行遍历检测。 2. 遍历检查会查找 `".."` 段。 3. 因为该段显示为 `"C:.."`,检查未被触发。 4. 函数 `stripAbsolutePath()` 随后移除了驱动器前缀(`C:`)。 5. 结果路径变为: `../target.txt` 6. 硬链接目标随后相对于解压目录进行解析。 这允许路径逃离预期的解压根目录。 ## 影响 攻击者可以利用执行解压进程的权限,覆盖**解压目录之外**的文件。 潜在的现实场景包括: • 解压**不受信任的 tar 存档**的 CLI 工具 • 处理**第三方构件**的构建流水线 • 导入**用户提供的 tar 文件**的服务 • 解压存档的包管理器或插件系统 ## 用法 1. 安装易受攻击的依赖项 `npm install tar@7.5.9` 2. 运行 PoC `node poc.cjs` 该脚本生成一个恶意的 tar 存档,并演示写入解压后的文件会导致解压目录之外的文件被覆盖。 ## 参考资料 - GitHub 安全公告 [https://github.com/isaacs/node-tar/security/advisories/GHSA-qffp-2rhf-9h96](https://github.com/isaacs/node-tar/security/advisories/GHSA-qffp-2rhf-9h96) - CVE https://nvd.nist.gov/vuln/detail/CVE-2026-29786
标签:CVE-2026-29786, DNS 解析, JavaScript安全, Maven, MITM代理, node-tar, NPM包安全, PoC, Tar归档, Unpack漏洞, Zero-Day, 任意文件写入, 文件覆盖, 文档安全, 暗色界面, 暴力破解, 漏洞验证, 目录穿越, 硬链接攻击, 自定义脚本, 自定义脚本, 规范化攻击, 路径遍历