CVE-2025-69263pnpm是一款流行的JavaScript包管理器,广泛用于Node.js项目中。2026年1月披露的安全漏洞显示,pnpm在10.26.2及以下版本中存在严重的安全缺陷:HTTP tarball依赖和git托管的tarball依赖在锁定文件中存储时未包含完整性哈希值。这一设计缺陷导致远程服务器可以在每次安装时提供不同的内容,即使项目已提交了锁定文件(lockfile)也无法提供保护。攻击者可以发布包含HTTP tarball依赖的恶意包,当受害者安装该包或其依赖树中的任何包时,攻击者能够根据不同的用户或CI/CD环境提供不同的代码。这种攻击方式具有高度的隐蔽性,因为传统的包管理器安全机制(如锁定文件)对此类攻击无效。该漏洞影响所有使用pnpm管理依赖的项目,特别是在自动化构建和持续集成环境中风险更高,因为攻击者可以针对特定构建环境定制恶意负载。
漏洞根源在于pnpm的依赖解析和锁定机制设计。当解析HTTP tarball依赖时,pnpm仅记录依赖的URL和版本信息,而不存储内容的完整性哈希(如SHA-256)。在后续安装过程中,pnpm会直接从指定URL重新下载tarball包,而不验证内容是否与首次安装时一致。攻击者利用这一特性可以:1)在受害者首次安装时提供正常代码,待锁定文件提交后切换为恶意代码;2)根据请求来源的IP地址、User-Agent或其他特征返回不同内容;3)在CI/CD环境中针对特定构建系统或配置返回定制化payload。由于锁定文件本身不包含完整性验证信息,即使项目完全锁定依赖版本也无法阻止此类攻击。攻击的触发条件是受害者的依赖树中存在任意一层使用HTTP URL直接引用tarball的包,而非通过npm registry的标准分发机制。