文章摘要
2025年JavaScript生态频遭供应链攻击,尤其是Shai-Hulud攻击促使行业重新审视大规模自动化威胁。npm将推出分阶段发布机制,增加发布流程的审核环节,同时加强可信发布和身份验证工作,以应对供应链安全风险。此前npm从传统令牌迁移时已暴露出发布系统的脆弱性。
文章总结
标题:npm将实施分阶段发布机制以应对供应链安全挑战
2025年,JavaScript生态系统持续遭受供应链攻击,其中多波次的"沙虫行动"(Shai-Hulud)彻底改变了人们对大规模自动化攻击的认知。面对这一形势,npm宣布将推出分阶段发布(staged publishing)机制,这是继取消传统令牌后的又一重大安全举措。
核心安全措施: 1. 分阶段发布机制 - 引入发布前审查窗口 - 要求包所有者进行MFA验证确认 - 为维护者提供拦截恶意变更的机会
- 配套改进
- 加速基于OIDC的可信发布(trusted publishing)批量接入
- 扩展对GitHub Actions和GitLab之外CI平台的支持
传统令牌取消的余波: 2025年11月,npm禁用传统令牌创建,12月全面撤销。这一转变虽然提升了安全性,但给维护大量软件包的团队带来巨大挑战: - 可信发布存在功能限制(如不能用于首次发布新包) - 细粒度令牌管理需要跨仓库逐个配置 - 过渡期文档混乱导致认证问题频发
可信发布的现状与局限: 目前仅支持少数CI平台,缺乏发布时强制2FA等执行机制。OpenJS基金会安全专家Wes Todd指出,现有实现存在设计缺陷,可能导致新的安全盲区。
超越凭证安全: ESLint创建者Nicholas Zakas提出,应借鉴信用卡行业的异常检测机制: - 标记异常地理位置发布 - 限制生命周期脚本添加 - 对偏离历史模式的发布要求额外验证
分阶段发布的意义: 该机制通过注册表层面的发布暂停,为生态系统提供缓冲期。其效果将取决于: - 与CI自动化的兼容性 - 大规模组织的审批流程 - 是否设为默认要求
行业启示: 2025年的事件表明,单一安全措施远远不够。npm面临的挑战在于如何将凭证强化、可信发布、异常检测和发布护栏等多项措施有机整合,以适应开源软件的实际开发和维护模式。
(注:原文中的图片说明和部分技术细节已根据中文阅读习惯进行简化处理,保留了核心事实和观点)
评论总结
以下是评论内容的总结:
支持可信发布但指出其局限性 - 当前可信发布适用范围有限,仅支持少量CI提供商,且缺乏强制2FA等执行机制(woodruffw) * "trusted publishing applies to a limited set of use cases...does not yet offer enforcement mechanisms" * "maintainer groups caution against treating it as a universal upgrade" - 实际使用中面临挑战,特别是多包管理时(spankalee) * "Turning on Trusted Publishers was a huge pain with so many package" * "we're just extremely cautious with any PRs right now"
对可信发布的质疑 - 可能造成供应商锁定,仅支持特定CI系统(lloydatkinson) * ""trusted publishing" means a type of reverse vendor lock in?" - 认为语言特定包管理器是失败实验,应回归发行版包管理(m4rtink) * "declare this to be a failed experiment" * "go back to robust and secure distro based package management"
实施过程中的问题 - GitHub激进移除API凭证加剧了过渡困难(woodruffw) * "deciding to remove normal API credentials entirely strikes me as extremely aggressive" - npm CLI工具支持滞后加剧混乱(herpdyderp) * "I still can't use 2FA to publish because their CLI simply cannot handle it"
对安全改进的期待 - 需要结合可信发布与人工2FA验证(spankalee) * "want...to use CI-based publishing, with Trusted Publishers, but with a human-in-the-loop 2FA step" - 需要更好的依赖分析和沙箱工具(spankalee) * "need tools to lock down and analyze our dependencies better" * "want better tools for analyzing and sandboxing 3rd party PRs"