被所有人忽视的 GitHub 警告:「此提交不属于任何分支」

多个流行的 GitHub Actions 在发布流程中存在一个安全模式,许多用户并不了解:这些 Actions 的发布提交(commit)不属于 Action 仓库的任何分支。这个看似技术性的细节造成了一个严重的安全盲区,使得验证你正在使用的内容是否可信变得更加困难。

我们在现实中发现的攻击向量

在 tj-actions 和 reviewdog 安全事件中,这一问题的严重性变得清晰起来。在这些攻击中,恶意行为者采用了一种巧妙的技巧:他们更新了现有标签(tag)指向不属于默认分支的提交。这些是"冒名顶替的提交"——它们实际上不在原始仓库中,而是存在于攻击者控制的分叉(fork)中。

为什么攻击者会这样做?原因很简单:为了规避 PR 审查,并绕过对默认分支代码更改的审查。通过将标签指向默认分支之外的提交,或指向攻击者控制的分叉,他们可以在注入恶意代码的同时,让普通观察者认为这是合法的。

我们的发现:一个普遍存在的问题

在 StepSecurity,我们实现了检测能力,当发布标签指向不在 Action 仓库任何分支上的提交时向我们发出警报。我们的发现令我们惊讶:许多合法的、流行的 Actions 遵循的发布模式与这些攻击产生了相同的警告信号。

我们发现的典型工作流程如下:

  1. 创建一个专门用于发布的分支
  2. 运行 ncc(Node.js 编译器)生成包含捆绑代码的 dist 文件夹
  3. 创建一个指向此提交的新标签
  4. 删除该分支

结果是:当你在 GitHub 上查看这些发布时,你会看到那条熟悉的警告信息:"此提交不属于此仓库的任何分支,可能属于仓库外的分叉。"对于注重安全的用户来说,这造成了一个困境——你如何区分合法的发布流程和潜在的安全威胁?

流行 Actions 的示例

让我们看看三个遵循此模式的知名 GitHub Actions:

示例 1:cloudflare/wrangler-action

发布标签指向一个不再有关联分支的提交,使验证变得困难

https://github.com/cloudflare/wrangler-action/commit/da0e0dfe58b7a431659754fdf3f186c529afbe65

该 Action 被超过 43,000 个公开仓库使用,可以轻松使用 wrangler 和 GitHub Actions 部署 Cloudflare Workers 应用程序。发布标签指向一个不再有关联分支的提交,使验证变得困难。

示例 2:slackapi/slack-github-action

虽然发布是可信的,但这种发布模式让人难以一眼就验证这一点

https://github.com/slackapi/slack-github-action/commit/37ebaef184d7626c5f204ab8d3baff4262dd30f0

另一个流行的 Action,被超过 16,000 个公开仓库使用,遵循相同的发布流程。虽然发布是可信的,但这种发布模式让人难以一眼就验证这一点。

示例 3:devcontainers/ci

一个旨在简化在 CI/CD 系统中使用 Dev Containers 的 GitHub Action,被超过 5,000 个公开仓库使用,存在相同的问题。

https://github.com/devcontainers/ci/commit/8bf61b26e9c3a98f69cb6ce2f88d24ff59b785c6

StepSecurity 如何帮助保护你的工作流程

认识到这一安全风险和该模式的普遍性,StepSecurity 提供了两个关键功能来帮助我们的客户应对这一挑战:

1. 冒名顶替提交检测

我们的平台主动监控你的 GitHub Actions 使用情况。如果你使用的 Action 的标签或提交 SHA 不在默认分支中,我们会触发警报。此检测帮助你:

  • 立即识别可能已被入侵的 Actions
  • 审查遵循风险发布模式的 Actions
  • 就信任哪些 Actions 做出明智的决策

2. StepSecurity 维护的 Actions

我们在 Action 安全性方面更进一步,创建了流行 Actions 的安全、直接替换方案。我们的维护 Actions 具有以下特点:

  • 透明的发布流程:所有发布都绑定到主分支上的提交
  • 安全优先的方法:定期进行安全审计和依赖更新
  • 完全兼容:设计为直接替换,只需最少的配置更改
  • 可信的来源:为每个发布提供清晰的审计追踪

总结

GitHub Actions 发布的现状对注重安全的组织来说是一个真正的挑战。虽然许多合法的 Actions 使用会触发安全警告的发布流程,但相同的模式也可能隐藏恶意活动。

通过了解这些风险并实施适当的保护措施,我们可以在维护 CI/CD 管道安全的同时,继续利用 GitHub Actions 的强大功能。

我们将在 6 月 25 日上午 10:00(太平洋标准时间)举办一场网络研讨会,讨论第三方 GitHub Actions 的治理问题,届时我们将更详细地讨论这个问题。点击此处注册:https://us06web.zoom.us/webinar/register/WN_lWAj51A3TKav2bqWVJ4_EA#/registration