开源软件是现代软件产业的基石。其协作性质和庞大的生态系统赋能全球开发者,以前所未有的规模推动效率和进步。这种规模也带来了独特的漏洞,这些漏洞不断受到恶意行为者的测试和攻击,使得开源安全成为所有人的关键关切。
透明度是维持社区信任的核心。今天,我们将分享近期npm注册表事件的详细信息、我们采取的补救措施,以及我们如何继续投资于npm安全。
近期对开源生态系统的攻击
软件行业近期遭遇了软件包注册表(包括npm)上破坏性账户接管攻击的激增。这些持续的攻击使恶意行为者能够未经授权访问维护者账户,随后通过知名、受信任的软件包分发恶意软件。
2025年9月14日,我们收到了关于Shai-Hulud攻击的通知,这是一种自我复制的蠕虫,通过被入侵的维护者账户注入恶意的安装后脚本到流行的JavaScript软件包中,从而渗透到npm生态系统。通过将自我复制与窃取多种类型秘密(而不仅仅是npm令牌)的能力相结合,如果不是GitHub和开源维护者及时采取行动,这种蠕虫可能引发无休止的攻击流。
针对此事件,GitHub迅速果断地采取了行动,包括:
- 立即从npm注册表中移除500多个受感染的软件包,以防止恶意软件的进一步传播。
- npm阻止上传包含恶意软件入侵指标的新软件包,切断自我复制模式。
此类漏洞侵蚀了对开源生态系统的信任,并对整个软件供应链的完整性和安全构成直接威胁。它们也突显了为什么提高认证和安全发布实践的标准对于加强npm生态系统以抵御未来攻击至关重要。
npm加固软件包发布的路线图
GitHub致力于调查这些威胁并减轻它们对开源社区构成的风险。为了解决令牌滥用和自我复制恶意软件问题,我们将在不久的将来更改认证和发布选项,仅包括:
- 需要双因素认证的本地发布。
- 有限寿命为七天的细粒度令牌。
- 可信发布。
为了支持这些更改并进一步改善npm生态系统的安全性,我们将:
- 弃用传统的经典令牌。
- 弃用基于时间的一次性密码双因素认证,将用户迁移到基于FIDO的双因素认证。
- 限制具有发布权限的细粒度令牌的较短有效期。
- 默认设置发布访问以不允许令牌,鼓励使用可信发布者或强制执行双因素认证的本地发布。
- 移除绕过双因素认证进行本地软件包发布的选项。
- 扩展可信发布的合格提供商。
我们认识到,我们正在实施的一些安全更改可能需要更新您的工作流程。我们将逐步推出这些更改,以确保在加强npm安全状况的同时最大限度地减少中断。我们致力于在此过渡期间为您提供支持,并将提供具有明确时间表、文档、迁移指南和支持渠道的未来更新。
通过可信发布加强生态系统
可信发布是OpenSSF保护软件存储库工作组推荐的安全功能,因为它消除了在构建系统中安全管理API令牌的需要。它由PyPI于2023年4月首创,作为从构建流水线中移除API令牌的一种方式。自那时起,可信发布已添加到RubyGems(2023年12月)、crates.io(2025年7月)、npm(同样在2025年7月)以及最近的NuGet(2025年9月)以及其他软件包存储库中。
当npm发布对可信发布的支持时,我们的意图是让这一新功能的采用有机增长。然而,攻击者向我们表明他们不会等待。我们强烈鼓励项目尽快为所有受支持的软件包管理器采用可信发布。
npm维护者现在可以采取的行动
这些来自GitHub和更广泛软件社区的努力,突显了我们加强软件供应链安全的全球承诺。生态系统的安全是共同责任,我们感谢开源社区的警惕和协作。
以下是npm维护者现在可以采取的行动:
- 使用npm可信发布代替令牌。
- 加强账户、组织和软件包上的发布设置,要求对任何写入和发布操作进行双因素认证。
- 在配置双因素认证时,使用WebAuthn代替基于时间的一次性密码。
真正的韧性需要软件行业中每个人的积极参与和警惕。通过采用强大的安全实践、利用可用工具并为这些集体努力做出贡献,我们可以共同为所有人构建一个更安全、更可信的开源生态系统。