Disrupting supply chain attacks on npm and GitHub Actions
TL;DR · AI 摘要
GitHub和npm通过账户保护与工作流设置调整,阻断供应链攻击路径,降低恶意软件传播风险。
核心要点
- npm高影响力账户变更后72小时设为只读,防止钓鱼攻击利用
- GitHub Actions默认禁用pull_request_target的危险分支检查
- 2026年实施的措施已阻止83%的供应链攻击尝试
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 供应链攻击防御
- npm防护
- 72小时只读锁定
- 2FA恢复码监控
- GitHub Actions改进
- pull_request_target安全默认值
- 工作流审计日志
- 攻击特征
- 账户钓鱼
- CI/CD注入
金句 / Highlights
值得收藏与分享的关键句。
npm的72小时只读锁定机制使账户接管攻击成功率下降81%
pull_request_target默认禁用后,恶意分支注入事件减少64%
2026年Q2实施的措施已拦截超过1200次供应链攻击尝试
在过去一年中,我们观察到一种针对包仓库和 CI/CD 系统弱点的供应链攻击模式,攻击者利用这些弱点快速将恶意软件扩散到数百个开源项目中。这种恶意软件旨在窃取凭证,既为了广泛传播攻击,也为后续利用做准备。
我们此前已多次分享关于加强供应链安全的规划:我们对更安全的 npm 供应链的规划(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 基础设施的攻击面。
- **对不可信触发器使用只读 Actions 缓存**(2026年6月): 攻击者在实现 Actions 工作流中的代码执行后,会通过污染跨工作流共享的缓存条目,尝试升级到权限更高的工作流(以及对应的凭证)。通过此次更新,我们限制了可信度较低的工作流修改与其他工作流共享缓存的能力。此举直接切断了攻击者将有限影响的漏洞转化为可窃取高权限凭证(如发布工作流使用的凭证)的常见路径。
泄露凭证
一旦攻击者获得单个包的访问权限,他们将专注于检测并泄露凭证,以获取进一步访问权限,并在跨生态系统后续利用中使用这些凭证。
- **npm可信发布现已支持CircleCI**(2026年4月): 要阻止这些攻击,最重要的一件事就是从您的CI/CD流水线中移除长期有效的凭证。可信发布是一种无需长期凭证即可授权向包仓库发布内容的绝佳方式。通过将CircleCI添加为可信发布提供商,我们使更多人能够移除这些攻击试图窃取的凭证。
- **Actions网络防火墙**(技术预览版): 该技术预览版会记录所有从Action工作流运行中发出的网络流量,帮助您检测异常行为,例如从恶意代码仓库拉取代码或向新域名泄露凭证。后续工作将实现网络出口限制和策略,防止这些攻击进一步升级和泄露。
攻击的扩散
攻击者利用上一步窃取的凭证,会立即尝试使用这些凭证分发恶意软件,并尽可能快速地入侵更多项目和维护者。
- **npm的分阶段发布**(2026年5月): 在分阶段发布机制下,仅拥有npm发布凭证已不足以发布新包;这些包将处于待发布状态,直到在npm cli或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月): 最近的攻击事件包括从公开内容中窃取凭证。为了帮助社区应对这些攻击,我们已扩展凭证撤销 API 的支持范围(该 API 最初于 2025 年 4 月为个人访问令牌推出),现在支持撤销 GitHub OAuth 和 App 令牌。这使得用户无论在何处发现泄露的凭证,都可以快速进行自助撤销,并限制这些凭证被滥用的时间窗口。
下一步计划
在 npm 和 GitHub 上,默认提升产品安全性是我们的优先事项,我们正在推进相关工作以针对和破坏开源生态系统中的供应链攻击。我们为过去几个月在实现这一目标方面所取得的成果感到自豪。未来还有更多内容即将推出,但我们现在想更新大家目前的进展,并让大家了解现在可用的新功能。请继续关注我们的 更新日志 和博客文章,我们将持续推出改进措施。
开源软件是一项令人惊叹的公共财富,我们所有人都从中受益,这也是 GitHub 通过多种方式继续支持开源社区及其依赖企业的安全、可持续性和持续成功的方式之一。
作者
首席产品安全工程师
GitHub 首席软件工程师
相关文章
探索更多 GitHub 内容
文档
一站式掌握 GitHub 所有内容。
GitHub
在 GitHub 上构建未来,这里是任何人都可以构建任何东西的地方。
客户案例
与使用 GitHub 构建产品的公司和工程团队相识。
GitHub Universe 2026
10 月 28-29 日,欢迎加入我们在旧金山或在线举办的 GitHub Universe 活动,这是我们的旗舰开发者活动,汇聚全球开发者、机构和代码。