GitHub供应链攻击事件:Coinbase遭袭,218个仓库暴露,CI/CD密钥泄露

image

  此次供应链攻击涉及 GitHub Action "tj-actions/changed-files",最初是针对 Coinbase 的一个开源项目的高度定向攻击,随后演变为范围更广的威胁。

  攻击过程与影响

  Palo Alto Networks Unit 42 在一份报告中指出:“攻击载荷主要针对其开源项目 agentkit 的公共 CI/CD 流程,可能是为了利用它进行进一步的攻击。然而,攻击者未能使用 Coinbase 的密钥或发布软件包。”

  该事件于 2025 年 3 月 14 日曝光,当时发现"tj-actions/changed-files"被入侵,注入了泄露运行该工作流的仓库中敏感密钥的代码。该漏洞被分配了 CVE 标识符 CVE-2025-30066(CVSS 评分:8.6)。

  根据 Endor Labs 的估计,218 个 GitHub 仓库因这次供应链攻击暴露了其密钥,泄露的信息主要包括 DockerHub、npm 和亚马逊云服务(AWS)的“几十个”凭证,以及 GitHub 安装访问令牌。

  安全研究员 Henrik Plate 表示:“考虑到成千上万的仓库依赖于这个 GitHub Action,供应链攻击的初始规模听起来很可怕。然而,深入分析工作流、运行情况和泄露的密钥后,发现实际影响比预期的要小:‘仅’218 个仓库泄露了密钥,其中大多数是短期的 GITHUB_TOKEN,一旦工作流运行完成就会过期。”

  攻击手段与后续发展

  此后,另一个名为"reviewdog/action-setup"的 GitHub Action 的 v1 标签也被入侵,该标签通过"tj-actions/eslint-changed-files"作为依赖项被"tj-actions/changed-files"使用,其攻击载荷与 tj-actions 事件类似。"reviewdog/action-setup"的漏洞被追踪为 CVE-2025-30154(CVSS 评分:8.6)。

  据称,CVE-2025-30154 的利用使未识别的威胁行为者获得了与"tj-actions/changed-files"相关的个人访问令牌(PAT),从而允许他们修改仓库并推送恶意代码,进而影响了所有依赖该 Action 的 GitHub 仓库。

  Unit 42 的研究人员 Omer Gil、Aviad Hahami、Asi Greenholts 和 Yaron Avital 表示:“当执行 tj-actions/eslint-changed-files Action 时,tj-actions/changed-files CI 运行器的密钥被泄露,攻击者得以窃取运行器中使用的凭证,包括属于 tj-bot-actions GitHub 用户账户的个人访问令牌(PAT)。”

  目前怀疑攻击者设法获得了对 reviewdog 组织具有写权限的令牌,以进行恶意修改。然而,该令牌的获取方式目前仍不清楚。

  此外,对"reviewdog/action-setup"的恶意提交据称是通过首先分叉相应仓库,提交更改,然后创建分叉拉取请求到原始仓库,最终引入任意提交——这种情况被称为“悬空提交”。

  Palo Alto Networks 的高级研究经理 Gil 告诉 The Hacker News:“攻击者采取了多种技术手段来掩盖其踪迹,例如利用悬空提交、创建多个临时 GitHub 用户账户,以及在工作流日志中混淆其活动(尤其是在最初的 Coinbase 攻击中)。这些发现表明,攻击者技术高超,对 CI/CD 安全威胁和攻击策略有深刻理解。”

  Unit 42 推测,分叉拉取请求背后的用户账户"iLrmKCu86tjwp8"可能在攻击者从注册时提供的合法电子邮件地址切换到一次性(或匿名)电子邮件后从公众视野中隐藏,这可能导致该用户的所有交互和操作被隐藏。然而,GitHub 在回应时既未确认也未否认这一假设,但表示正在积极审查情况并采取必要措施。

  GitHub 发言人告诉 The Hacker News:“目前没有证据表明 GitHub 或其系统遭到入侵。所提及的项目是用户维护的开源项目。”

image

  “GitHub 继续根据 GitHub 的可接受使用政策审查并处理与仓库内容相关的用户报告,包括恶意软件和其他恶意攻击。用户应始终在更新到新版本之前审查 GitHub Actions 或他们代码中使用的任何其他包。这一点在这里与所有其他使用第三方代码的情况一样。”

  对 tj-actions/changed-files 的 GitHub 分叉的深入搜索发现了另外两个账户"2ft2dKo28UazTZ"和"mmvojwip",这两个账户此后已从平台上删除。这两个账户还被发现创建了与 Coinbase 相关的仓库的分叉,如 onchainkit、agentkit 和 x402。

  进一步检查发现,这些账户通过分叉拉取请求修改了 agentkit 仓库中的"changelog.yml"文件,指向之前使用 PAT 发布的恶意版本的"tj-actions/changed-files"。

  据信,攻击者获得了对 agentkit 仓库具有写权限的 GitHub 令牌——这反过来是由执行 tj-actions/changed-files GitHub Actions 促成的——以便进行未经授权的更改。

  攻击者的策略与动机

  另一个值得强调的重要方面是两种情况下使用的攻击载荷的差异,表明攻击者试图保持低调。

  Gil 表示:“攻击者在攻击的不同阶段使用了不同的攻击载荷。例如,在大规模攻击中,攻击者转储了运行器的内存,并将存储为环境变量的密钥打印到工作流的日志中,无论哪个工作流正在运行。然而,在针对 Coinbase 时,攻击者专门获取了 GITHUB_TOKEN,并确保只有在仓库属于 Coinbase 时才会执行攻击载荷。”

  目前尚不清楚此次攻击的最终目标是什么,但 Gil 指出,“强烈”怀疑其意图是经济利益,可能是试图进行加密货币盗窃,考虑到对 Coinbase 的高度针对性。截至 2025 年 3 月 19 日,该加密货币交易所已修复了攻击。

  目前也不清楚是什么促使攻击者改变策略,将最初的有针对性的攻击转变为大规模且不那么隐秘的行动。

  Gil 表示:“一种假设是,在意识到他们无法利用其令牌毒害 Coinbase 仓库——并得知 Coinbase 已检测并缓解了攻击后——攻击者担心失去对 tj-actions/changed-files Action 的访问权限。由于入侵此 Action 可能提供对许多其他项目的访问权限,他们可能决定迅速采取行动。这可以解释为什么他们在 Coinbase 缓解其暴露后仅 20 分钟就发起了大规模攻击,尽管检测风险增加。”

  参考来源:

GitHub Supply Chain Breach: Coinbase Attack Exposes 218 Repositories, Leaks CI/CD Secrets