阻断 npm 和 GitHub Actions 中的供应链攻击
过去一年中,供应链攻击频发,针对包仓库和CI/CD系统的弱点,迅速将恶意软件传播到数百个开源项目。该恶意软件既试图窃取凭证以广泛传播攻击,也用于后续利用。
我们已经多次撰文介绍我们加强供应链的计划:我们为打造更安全的非自营产品管理供应链的计划2025年9月,加强供应链安全:为下一次恶意软件活动做准备2025年12月,以及我们GitHub Actions 2026安全路线图即将推出的内容2026年3月。
在这篇文章中,我们将向您更新我们实施的变更,这些变更直接干扰了一些最常见且影响深远的供应链攻击技术。
供应链攻击的结构
供应链攻击将多个弱点串联起来,没有单一的安全能力能阻止它们。应对这些问题需要整体性,优先处理那些破坏攻击链中最具影响力环节的缓解措施。
我们的团队一直在研究这些攻击,准备部署多项改进措施,以干扰攻击并限制其影响。这得益于与安全研究和开发者社区的合作。
攻击在软件生态系统中的传播方式各不相同。然而,大多数此类攻击采用类似手法,以获得项目初始访问权限、升级权限,并在用户和软件间分发。
过去几个月对 npm 和 GitHub Actions 的改进重点在于切断特定、常见的技术,并为客户提供识别和应对这些攻击的方式。
初步妥协
攻击始于攻破单个项目,通常直接攻破维护者的账户,或针对项目的操作工作流程。
- NPM为高影响力账户增加了预防性账户保护 (2026年6月)攻击通常始于针对维护者的钓鱼活动。通过这一变化,高影响力的NPM账户在更改邮箱或使用2FA恢复码时,将进入72小时的只读模式。这种延迟让维护者有时间响应并恢复账户,然后账户才能被用来发动攻击。
- GitHub Actions 检查的默认pull_request_target更安全 (2026年6月):项目CI/CD流水线中的一个常见漏洞包括“PWN请求,”工作流在触发来自分支的拉取请求时,然后从该分支执行用户提交且不受信任的代码。我们更改了默认行为
actions/checkout防止常见被利用触发器分支中不受信任的代码被检查,除非你明确选择退出(在评估风险后)。这一变更及其回溯到旧版本,切断了最常见的易受攻击代码模式之一,导致GitHub Actions CI/CD工作流中代码执行和项目初期被攻破。 - 控制谁以及什么触发GitHub Actions工作流程 (2026年6月):也许你更愿意完全选择退出这些高风险的触发点,或者限制谁能触发它们。这个新控制功能允许你设置企业、组织或仓库层面的政策,比如谁可以触发工作流以及允许哪些触发类型。这些工作流执行策略为Action工作流提供了可治理和可定制的最小权限层,从而减少CI/CD基础设施的攻击面。
- 只读动作缓存不信任触发器 (2026年6月)攻击者在动作工作流中实现代码执行后,便试图通过毒害跨工作流共享的缓存条目,升级到更高权限的工作流(从而获得凭证)。通过这一变更,我们限制了不太受信任的工作流程修改与其他工作流程共享缓存的能力。这直接关闭了攻击者常用的路径,这些漏洞通常影响有限,但漏洞会泄露发布和发布工作流程中使用的高度权限凭证。
撤离凭证
一旦攻击者获得了单个软件包的访问权限,他们就会专注于检测和窃取凭证,以便获得更多访问权限,并在后续跨生态系统中进行利用。
- npm Trusted Publishing 现已支持 CircleCI (2026年4月):你能做的首要任务是从你的CI/CD流水线中移除长期存档凭证。可信出版这是无需长期凭证即可授权发布到包仓库的好方法。通过将CircleCI加入为可信发布提供商,我们使更多人能够移除这些攻击试图窃取的凭证。
- 动作网络防火墙 (技术预览中):本技术预览会记录Action工作流程运行中的所有出站网络流量,以便检测异常行为,如拉取恶意代码或将凭证泄露到新域。未来工作将使网络出口限制和政策能够在这些攻击进一步升级和盗窃前阻止它们。
传播攻击
利用前一步收集到的凭证,攻击者试图利用这些凭证分发恶意软件,并迅速攻破更多项目和维护者。
- NPM的分阶段发布 (2026年5月):分阶段发布时,仅凭凭证在npm上发布新包是不够的;这些套餐会被分阶段保存,直到额外批准并在 NPM CLI 或 On 中提供 2FA 认证npmjs.com.这种选择加入的安全控制允许维护者确保其发布的任何版本的软件包都经过了这一额外授权。通过将CI/CD管道和自动化中使用的凭证与可发布到注册表的凭证解耦,切断了CI/CD管道到恶意软件分发的攻击链。
- 即将发布的 npm v12 重大变更 (2026年6月):为了尽快传播恶意软件,攻击者使用npm安装时脚本窃取凭证,而不是等待软件包在运行时执行代码。在 npm v12 中,我们推出了一项突破性变更,默认禁用这些安装脚本。由于安装脚本在多个流行软件包依赖的安装过程中有合法用途,你可以通过批准特定脚本重新启用它们。安装时代码执行的额外向量也被默认禁用 git 或远程 URL 依赖来阻挡。
- Dependabot 版本更新引入默认包冷却时间 (2026年7月)攻击者依赖速度,希望恶意发布能被尽可能多的下游项目吸引,避免被发现。通过Dependabot更新版本时,现在要等到某个版本至少三天后才会打开拉取请求,这样就能在恶意版本到达你的项目之前,检测信号有时间出现。该冷却时间默认开启,安全更新仍会立即开放,因此关键修复从不延迟。
识别和应对供应链攻击
在加强npm和GitHub Actions以破坏和限制供应链攻击影响的同时,我们也在努力为用户提供功能和工具,帮助识别和应对影响其项目和账户的供应链事件。
- 事件响应中的自助式凭证吊销 (2026年6月)GitHub凭证仍然是供应链攻击中持续攻击的目标。该功能提供自助工具,可即时撤销企业中特定用户的所有凭证。这建立在全企业范围的事件响应凭证管理工具该系统于2月发布,允许企业管理员和成员在供应链攻击中凭证被泄露时迅速响应。
- 扩展的凭证撤销API支持。 (2026年3月)最近的袭击......
评论
?
参与讨论