近年来,开源软件以其开放协作和共享精神,成为推动软件行业飞速发展的核心动力。然而,广阔的开源生态系统也因其复杂性和开放性而面临着层出不穷的安全挑战。特别是NPM(Node Package Manager)作为JavaScript生态的重要组成部分,成为攻击者的高频目标,威胁着整个软件供应链的安全。面对这一局面,GitHub发布了针对NPM供应链安全的全面改进计划,旨在从根本上提升软件发布和包管理的安全防护能力。最近发生的一系列账号接管和恶意代码植入事件,暴露了传统身份认证及包发布方式的薄弱环节。尤其是"Shai-Hulud"攻击事件,成为业界警醒的信号。
这次攻击通过接管NPM维护者账户,植入具有自我复制能力的恶意后安装脚本到多个流行JavaScript包中,企图利用这种蠕虫扩散攻击及窃取多种敏感信息,如API密钥和令牌。该事件一旦失控,后果不堪设想,但幸得GitHub与开源维护者的快速响应,成功阻断了攻击扩散,防止了更大范围的损失。针对这次事件的教训,GitHub迅速采取了多项紧急措施,包括从NPM注册库中删除了500多个受感染软件包,并阻止了携带恶意指标的新包上传。这些行动有效地切断了蠕虫的传播路径。然而,这些只是应急措施,长期解决方案需要从身份认证体系和发布流程上提升安全水平。GitHub计划对NPM的认证和包发布流程进行根本改造,重点将转向强制使用双因素认证和更加细粒度的令牌管理。
未来,包发布必须通过本地操作并启用双因素认证,且令牌的生命周期将限制在七天以内,以减少令牌被滥用的风险。GitHub还将逐步废除传统的经典令牌和时间同步一次性密码(TOTP)二步验证,转而推广更为安全和便捷的FIDO标准二步验证技术。FIDO基于公钥密码学,不仅抵御钓鱼攻击能力强,而且用户体验更佳,有利于广泛普及。此外,包发布权限的令牌默认禁用发布权限,鼓励用户采用可信发布方式或者开启双因素认证以确保发布过程的安全可信。可信发布是由开放源码安全基金会(OpenSSF)推崇的安全机制,极大避免了在构建流水线中管理API令牌的风险。它允许用户信任特定发布者,无需在自动化构建环境中暴露敏感凭据。
自PyPI首开先河之后,RubyGems、crates.io、NuGet等多个知名包管理平台相继加入了对可信发布的支持,NPM也在2025年7月引入此功能。GitHub鼓励所有NPM维护者尽快采用可信发布,避免因传统令牌滥用带来的安全隐患。对于维护者而言,当前可采取的措施包括切换到可信发布机制,加强账户及组织内的发布设置,强制启用双因素认证特别是基于WebAuthn的FIDO身份验证,提升账户安全等级。GitHub承诺将持续支持维护者,提供清晰的迁移指南、时间表和专门的技术支持,确保改进措施能顺利实施,降低对开发者和组织的影响。GitHub安全研究实验室持续通过AI辅助漏洞甄别和社区协作开展开源安全研究,推动漏洞快速发现与修复。此次NPM安全计划不仅仅是技术层面的强化,更是对开源社区集体责任感的呼唤。
开源的繁荣依赖于每一个开发者和维护者的安全意识和协作精神。通过更严密的身份验证机制、更安全的包发布流程和推广可信发布,GitHub力图营造一个值得信赖、稳健发展的NPM生态环境。开源生态的安全是一场长期战役,面对日益复杂的威胁态势,单一主体难以独自解决。只有依托整个软件产业的合力,借助先进技术和规范举措,才能建立起坚不可摧的供应链防线。展望未来,随着GitHub持续推动安全改进和开源社区的积极响应,预期NPM的安全形势将得到显著改善。维护者应实时关注官方动态,及时调整安全策略,积极采用新型认证和发布技术,携手构建一个更加安全、透明和高效的开源软件生态。
通过上述措施,GitHub不仅提升了npm生态的安全基线,更为全球软件供应链的可靠性提供了有力支撑。保障NPM的安全,不仅是保护无数开发者的利益,更是巩固软件行业持续创新和发展的根基。 。