近期对开源生态系统的攻击
软件行业最近遭遇了一波针对软件包注册表(包括npm)的破坏性账户接管攻击。这些持续进行的攻击使得恶意行为者能够未经授权访问维护者账户,随后通过知名可信软件包分发恶意软件。
2025年9月14日,我们收到了关于Shai-Hulud攻击的通知,这是一种自我复制的蠕虫病毒,通过入侵维护者账户渗透到npm生态系统,向流行的JavaScript软件包注入恶意安装后脚本。通过将自我复制与窃取多种类型密钥(不仅仅是npm令牌)的能力相结合,如果不是GitHub和开源维护者及时采取行动,这种蠕虫可能引发无休止的攻击流。
针对此事件,GitHub已采取迅速果断的行动,包括:
- 立即从npm注册表中移除500多个受感染的软件包,防止恶意软件进一步传播。
- npm阻止包含恶意软件攻击指标的新软件包上传,切断自我复制模式。
此类漏洞侵蚀了开源生态系统的信任,并对整个软件供应链的完整性和安全性构成直接威胁。它们也凸显了提高身份验证和安全发布实践标准对于加强npm生态系统抵御未来攻击的重要性。
npm加固软件包发布的路线图
GitHub致力于调查这些威胁并减轻它们对开源社区构成的风险。为了解决令牌滥用和自我复制恶意软件问题,我们将在不久的将来更改身份验证和发布选项,仅包括:
- 需要双因素认证(2FA)的本地发布。
- 有限寿命为七天的精细化令牌。
- 可信发布。
为了支持这些更改并进一步改善npm生态系统的安全性,我们将:
- 弃用传统经典令牌。
- 弃用基于时间的一次性密码(TOTP)双因素认证,将用户迁移到基于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代替TOTP。
真正的韧性需要软件行业每个人的积极参与和警惕。通过采用强大的安全实践、利用可用工具并为这些集体努力做出贡献,我们可以共同为所有人构建一个更安全、更可信赖的开源生态系统。