npm 12 默认禁用安装脚本以降低供应链风险
导语:GitHub 发布 npm 12,默认关闭 install 脚本并弃用绕过 2FA 的细粒度访问令牌(GATs),旨在削弱依赖链中的脚本执行风险,并推动发布流程向可信发布(OIDC)与带人工审批的分阶段模式迁移。
GitHub 已正式发布 npm 12 版本,该版本默认禁用安装脚本,同时弃用原本被设计用于绕过双因素认证(2FA)的细粒度访问令牌(GATs)。作为微软旗下的子公司,GitHub 强调,这一调整旨在削弱恶意软件经由依赖安装链潜入开发环境的可能性。
GitHub 指出,过去在 `npm install` 过程中会自动运行的若干行为已被改为“可选启用(opt-in)”。其中最核心的一项是:`allowScripts` 默认值为关闭(off)。这意味着开发者在安装依赖时,除非主动审查并批准相关脚本,否则任意第三方包中携带的安装脚本将不再自动执行。
如需审查并批准受信任的脚本,开发者现在需要运行命令 `npm approve-scripts –allow-scripts-pending`,然后将生成的允许列表(allowlist)提交至 `package.json` 文件中。这种方式使得脚本执行权限变得显式可追溯,避免了“盲目执行”的传统风险。

值得一提的是,这些变化在上个月就已提前预告。GitHub 当时建议开发者升级到 npm 11.16.0 或更高版本,运行常规的安装命令,并仔细审阅系统显示的告警信息,以便为最终的默认行为变更做好准备。
最新的 npm 发布版本还引入了两项新变化。第一项变化预计于 2026 年 8 月初生效。在此过渡期,GitHub 建议停止在相关操作中使用 2FA 绕过令牌,转而通过交互式方式并配合 2FA 完成相应流程。第二项变化则计划于 2027 年 1 月落地。GitHub 表示:“为做好过渡准备,建议将自动化发布迁移到可信发布(OIDC)或带有人工审批环节的分阶段发布模式,而不是继续依赖长期有效的发布令牌。”
与此同时,另一主流包管理器 pnpm 在其 11.10 版本中引入了一项新的 `_auth` 设置,用于以“按 URL 区分的结构化单一值”方式配置注册表认证。Socket 团队解释称:“其安全收益在于,凭据与其所属的主机是一同传递的,并且 pnpm 仅从环境变量或全局配置读取 `_auth`,而不会从项目内的文件中读取。这意味着仓库内被篡改的 `pnpm-workspace.yaml` 或 `.npmrc` 无法将有效令牌重定向至其他主机。被篡改的项目文件是攻击者获取立足点的常见途径,而重定向注册表令牌正是窃取令牌的直接路径,关闭该通道即可消除相关暴露风险。”
来源信息
来源:The Hacker News
原文链接:https://thehackernews.com/2026/07/npm-12-disables-install-scripts-by.html
作者:info@thehackernews.com (The Hacker News)

