本仓库包含 CVE-2026-29786 的 概念验证(PoC),这是 tar npm 包中的一个漏洞,允许特制的归档文件创建指向预期解压目录之外的硬链接。
当 tar 归档文件包含驱动器相对链接目标(如 C:../target.txt)时,就会出现此问题。由于库在解压过程中执行验证和路径规范化的顺序问题,遍历保护可以被绕过。
规范化后,路径变为 ../target.txt,从而允许链接目标逃逸出配置的解压目录。
当写入解压后的文件时,外部文件会被修改,因为两个路径引用的是同一个硬链接。
该漏洞发生在负责处理绝对路径(Unpack[STRIPABSOLUTEPATH])的解压逻辑中。
遍历检测在绝对路径剥离之前执行。
恶意标头值示例
linkpath: C:../target.txt
处理行为:
路径被分割成多个段以进行遍历检测。
遍历检查查找 ".." 段。
由于该段显示为 "C:..",检查不会触发。
stripAbsolutePath() 函数随后移除驱动器前缀(C:)。
生成的路径变为:
../target.txt
这使得路径能够逃逸出预期的解压根目录。
攻击者可以使用执行解压进程的权限,覆盖解压目录之外的文件。
潜在的真实世界场景包括:
• 解压不受信任的 tar 归档文件的 CLI 工具 • 处理第三方制品的构建流水线 • 导入用户提供的 tar 文件的服务 • 解压归档文件的包管理器或插件系统
npm install [email protected]
node poc.cjs
该脚本会生成一个恶意的 tar 归档文件,并演示写入解压后的文件会导致解压目录之外的文件被覆盖。