npm 12默认禁用安装脚本,斩断供应链攻击命脉

npm 12默认禁用安装脚本、Git和远程依赖,大幅降低开源供应链攻击风险。GitHub同时限制绕过2FA的细粒度令牌(GATs),要求人工审批发布。pnpm 11.10引入安全认证配置。本文详解变更细节、攻击链阻断原理及开发者迁移指南,助力DevSecOps加固软件供应链。

⛓️ High 供应链攻击

GitHub发布npm 12,默认禁用安装脚本和Git/远程依赖,显著降低开源软件供应链攻击面;同时限制绕过2FA的细粒度访问令牌(GATs),防止自动化发布被滥用。配套的pnpm 11.10也引入了更安全的认证配置方式,阻止恶意项目文件劫持令牌。

来源:The Hacker News | 2026-07-09 | 原文链接

🔍 关键发现

  • npm 12默认关闭install scripts(allowScripts=false),preinstall/install/postinstall及node-gyp构建不再自动执行,改为需用户手动审批白名单。
  • --allow-git和--allow-remote默认均为none,直接或传递性Git依赖及远程tar包依赖不再自动解析,必须显式授权。
  • npm 12引入`npm approve-scripts`命令,引导开发者生成并提交可信任脚本白名单(存储于package.json)。
  • 绕过2FA的细粒度访问令牌(GATs)将被逐步限制:2026年8月起无法执行敏感账户/包/组织管理操作;2027年1月起无法直接发布,仅能通过人工2FA审核的“暂存发布”模式进行。
  • pnpm 11.10新增`_auth`设置,将凭据与主机URL绑定,且只从环境变量或全局配置读取,防止项目文件(如pnpm-workspace.yaml、.npmrc)被篡改后重定向令牌。

⚔️ 攻击链分析

攻击者通过构造恶意npm包,在postinstall脚本中执行挖矿、信息窃取或后门植入操作;或利用Git依赖/远程tar包引入恶意代码。若开发者未显式审批,npm 12默认阻止此类自动执行,从源头截断攻击链。此外,GATs绕过2FA曾允许攻击者窃取令牌后直接发布恶意版本;新规要求人工2FA审批,增加攻击成本。

🛡️ 缓解建议

  • ✅ 升级至npm 12(或npm 11.16.0+),运行`npm install`后检查警告并运行`npm approve-scripts --allow-scripts-pending`,审核并提交可信脚本白名单。
  • ✅ 停止使用绕过2FA的GATs进行敏感操作,改为交互式2FA完成;自动化发布迁移至OIDC可信发布或含人工审批的暂存发布模式。
  • ✅ 使用pnpm 11.10+,通过环境变量或全局配置设置`_auth`,避免项目文件中存储凭据。
  • ✅ 定期审计package.json中的allowScripts白名单,仅保留必要脚本。

涉及漏洞:[]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 升级npm 12后现有项目会报错吗?如何适配?

会因默认禁止脚本导致依赖安装失败。需运行`npm install`查看警告,再执行`npm approve-scripts --allow-scripts-pending`,将可信脚本加入package.json的allowScripts白名单并提交。

❓ GATs绕过2FA被禁后,CI/CD如何发布npm包?

推荐迁移至OIDC可信发布(如GitHub Actions OIDC)或暂存发布:先用令牌暂存,再通过人工2FA审批后正式发布。2027年1月起直接发布功能将被移除。

❓ pnpm的_auth设置如何防止令牌劫持?

`_auth`将凭据与registry URL绑定,且只从环境变量或全局配置读取,不读取项目内pnpm-workspace.yaml或.npmrc。即使攻击者篡改项目文件,也无法重定向令牌到其他主机。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)