GitHub 日前发布公告宣布调整 NPM Trusted Publishing 规则:新建配置如果在 48 小时内没有完成首次成功发布那就会失败,不能再继续用于发布软件包。此次调整针对研究人员发现的仓库名回收漏洞,该漏洞可能让攻击者绕过包维护者的凭证,向他人名下的 NPM 包推送新版本。

攻击者可借用被放弃的仓库名发起攻击:
NPM 可信发布允许 GitHub Actions 使用短期 OIDC 令牌发布软件包,无需在工作流中保存长期访问令牌。但安全研究人员发现,在配置完成首次成功发布前,NPM 主要依据 GitHub 仓库的 所有者/仓库名 和工作流文件名建立信任,尚未将配置绑定到仓库的不可变身份。
如果维护者重命名、转移或删除仓库,原仓库名可能重新开放,攻击者可以注册同名仓库并创建名称匹配的工作流,进而取得 NPM 发布凭据,以原软件包名发布恶意版本。
安全研究人员估计有超过 1500 个 NPM 软件包受这个漏洞影响,累计下载量超过 1,000 万次,恶意版本可能沿用原包的名称和用户基础继续传播。
GitHub 加强安全验证:
GitHub 在 10 月 2 日宣布,可信发布配置必须在创建后 48 小时内完成首次成功发布。发布成功后配置将绑定到仓库的不可变身份,不再受此期限限制。若仓库或项目身份发生变化,维护者需要建立新的信任配置并重新完成验证,普通编辑不会重置 48 小时期限。
NPM 还开始拒绝由 GitHub Actions issue_comment 事件触发的可信发布令牌,pull_request_target 事件此前已经受到限制,受影响的发布工作流可以改成 push、release、workflow_dispatch 等事件。
消息源:GitHub