构建更安全的npm供应链:GitHub的加固方案

GitHub针对npm软件包注册表遭受的攻击提出安全加固方案,包括强制双因素认证、细粒度令牌和可信发布机制,旨在提升开源生态系统安全性并防范恶意软件传播。

开源软件是现代软件产业的基石。其协作性质和庞大的生态系统赋能全球开发者,以前所未有的规模推动效率和进步。这种规模也带来了独特的漏洞,这些漏洞不断受到恶意行为者的测试和攻击,使得开源安全成为所有人的关键关切。

透明度是维持社区信任的核心。今天,我们将分享近期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代替基于时间的一次性密码。

真正的韧性需要软件行业中每个人的积极参与和警惕。通过采用强大的安全实践、利用可用工具并为这些集体努力做出贡献,我们可以共同为所有人构建一个更安全、更可信的开源生态系统。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计