CVE-2026-23888pnpm是一款流行的JavaScript/Node.js包管理器。在10.28.1之前的版本中,pnpm的二进制文件获取器存在严重的路径遍历漏洞,允许恶意包在安装过程中将文件写入预期的提取目录之外。该漏洞源于两个攻击向量:一是通过恶意ZIP条目中的`../`路径遍历序列或绝对路径,利用AdmZip库的`extractAllTo`方法逃逸提取根目录;二是`BinaryResolution.prefix`字段在拼接到提取路径时缺乏安全验证,攻击者可构造`../../evil`等前缀将文件重定向到`targetDir`之外。此漏洞影响所有使用pnpm安装包含二进制资源的包的用户,以及配置自定义Node.js二进制位置和自动化CI/CD管道的场景。成功利用此漏洞可导致覆盖系统配置文件、脚本或其他敏感文件,最终可能实现远程代码执行(RCE)。
该漏洞的核心问题在于pnpm的二进制提取逻辑缺乏充分的路径安全验证。攻击向量一:当pnpm处理包含二进制资源的npm包时,会使用AdmZip库解压ZIP文件。攻击者可创建包含路径遍历序列(如`../../`)或绝对路径的恶意ZIP条目。AdmZip的`extractAllTo`方法在默认配置下不会阻止这些异常路径,导致文件被提取到预期目录之外。例如,一个路径为`../../etc/cron.d/malicious`的ZIP条目会在解压时写入系统目录。攻击向量二:`BinaryResolution.prefix`字段被直接拼接到文件提取路径中而没有任何规范化或验证。攻击者可以通过精心构造的`package.json`中的bin字段,设置prefix为`../../evil`,使提取的文件写入到项目目录之外的位置。这种攻击方式特别危险,因为它不需要修改ZIP结构,只需配置包的元数据即可。攻击者可以发布恶意包到npm仓库,等待受害者安装,从而在CI/CD环境中实现持久化攻击或获取敏感信息。