CVE-2026-23889CVE-2026-23889是pnpm包管理器在Windows平台上的一个路径遍历安全漏洞。该漏洞存在于pnpm的tarball提取功能中,攻击者可以通过恶意构造的npm包利用路径遍历技术将文件写入目标系统指定目录之外的位置。漏洞的根本原因在于pnpm的路径规范化逻辑仅检查了正斜杠相对路径(./),但未检查反斜杠相对路径(.\)。在Windows操作系统中,反斜杠被用作目录分隔符,因此攻击者可以使用类似.\..\..\的路径构造方式逃逸出包的安装目录。此漏洞影响所有使用pnpm在Windows平台上安装包的用户和CI/CD流水线,包括GitHub Actions的Windows运行器和Azure DevOps环境。攻击者可能利用此漏洞覆盖系统中的重要配置文件,如.npmrc、构建脚本或其他敏感文件,从而可能导致供应链攻击或权限提升。pnpm官方已在版本10.28.1中修复了此漏洞,建议所有Windows用户尽快升级。
该漏洞的技术原理涉及pnpm在解压tarball包时的路径验证机制不完善。当pnpm在Windows系统上提取npm包内容时,它会对包含正斜杠(/)的路径进行规范化处理,检查是否存在./等相对路径遍历模式,并阻止此类恶意路径。然而,相同的验证逻辑并未应用于包含反斜杠(\)的路径模式。在Windows系统中,.\test\..\..\etc\passwd这样的路径可以被正确解析为C:\etc\passwd,从而实现目录遍历攻击。攻击者只需创建一个包含恶意路径条目的package.tar文件,通过npm publish发布到包仓库。当受害者在Windows上使用pnpm安装该包时,恶意文件就会被写入到包目录之外的位置。这种攻击方式特别危险,因为它可以覆盖.npmrc等配置文件,可能导致后续安装操作执行攻击者控制的代码。漏洞的利用条件相对简单,无需特殊权限,只需要诱导用户安装一个恶意的npm包即可。