我们揭示了基线驱动监控如何捕获了2025年最具影响力的CI/CD供应链攻击之一,暴露了23000多个仓库的漏洞,其中包括来自GitHub、Meta和Microsoft的仓库。
在Black Hat获得演讲接受对于任何安全公司来说都是一个决定性时刻,我们很高兴分享我们在2025年黑帽美国大会上的演讲的关键见解。我们的40分钟简报详细介绍了我们如何检测并应对了2025年最重大的CI/CD供应链攻击之一。
改变一切的星期五下午
我们的演讲从一个与会议室里每位安全专业人士产生共鸣的故事开始。那是3月14日星期五下午,我们正在结束本周的最后一次会议。这时Slack通知来了——它将占据我们整个周末,并最终暴露一场影响全球数千家组织的供应链攻击。
tj-actions/changed-files GitHub Action,一个看似无害的用于检测拉取请求中文件更改的工具,被武器化了。这不仅仅是一个普通组件——它被超过23000个公共仓库积极使用,其中包括GitHub、Hugging Face、HashiCorp、Meta和Microsoft的仓库。
攻击:隐藏于众目睽睽之下
这次攻击的复杂性令人瞩目。攻击者不仅仅是入侵了这个action——他们采用了一种名为"冒名提交"(imposter commits)的技术。这些提交实际上并不存在于目标仓库中,而是存在于一个分叉中。通过GitHub的API架构,发布标签可以指向这些幽灵提交,使它们可以被访问,同时在仓库的提交历史中保持不可见。
在我们的演讲中,我们演示了攻击链:
- 攻击者创建了合法仓库的一个分叉
- 在他们的分叉中添加了恶意代码
- 更新了所有发布标签(v35、v44等)以指向他们的恶意提交
- 每个使用这些标签的工作流都会自动执行后门代码
恶意代码本身简洁却具有毁灭性。它从公共GitHub Gist下载了一个名为memdump.py的Python脚本,该脚本然后转储了Runner.Worker进程的内存——这是工作流执行期间保存所有CI/CD密钥的组件。这些密钥随后使用双重base64编码直接在构建日志中进行外泄,以绕过GitHub的自动密钥屏蔽。
通过基线监控进行检测
使本次演讲特别引人注目的是我们现场演示了攻击是如何被检测到的。StepSecurity Harden Runner通过监控数千次工作流运行建立了基线。当被入侵的action突然向gist.githubusercontent.com发出出站调用——这是那些运行中从未见过的目标——它立即触发了警报。
当我们在演示实际检测截图时,观众表现出特别的关注,显示单个异常网络连接如何暴露了传统安全工具遗漏的攻击。攻击者非常狡猾,使用GitHub拥有的具有高信誉分数的域名,大多数EDR解决方案会盲目信任这些域名。
多米诺效应:一连串的入侵
也许最令人震惊的发现是导致这次入侵的一连串妥协。我们的演讲中详细介绍的调查显示了一条复杂的攻击链:
- tj-actions/changed-files的入侵源于被入侵的reviewdog/action-setup action
- reviewdog action使用属于reviewdog维护者的被盗个人访问令牌(PAT)被入侵
- 该维护者的PAT是从spotbugs/spotbugs仓库中被盗的,他们有该仓库的访问权限
- spotbugs/spotbugs仓库本身使用从spotbugs/sonar-findbugs仓库被盗的另一个PAT被入侵
- 最初的入侵点是spotbugs/sonar-findbugs仓库中的Pwn Request漏洞
这种多米诺效应展示了GitHub Actions生态系统中的一个关键漏洞:action的互联性以及通常授予维护者的广泛权限为供应链攻击创造了完美风暴。reviewdog组织有一条政策,任何提交合并拉取请求的人都会自动获得该组织仓库的写权限。当其中一位维护者的PAT通过spotbugs链条被入侵时,这就为攻击者提供了入侵整个reviewdog组织的钥匙,进而导致了tj-actions的入侵。
现场演示:眼见为实
我们演讲的亮点是现场演示,我们重新创建了整个攻击。我们向观众展示了两种场景:
正常场景
具有干净构建日志和稳定网络基线的典型工作流运行。
入侵场景
标签被篡改后的同一工作流,显示:
- 恶意冒名提交的执行
- 实时凭证窃取
- 密钥以双重base64编码格式出现在构建日志中
- 由于异常连接,网络基线变得不稳定
构建日志中泄露的AWS访问密钥和GitHub令牌充分说明了威胁的严重性。
行业影响与响应
演讲强调了这如何从一个开源卫生问题演变为国家安全重要事项,当时CISA发布了一份关于这次入侵的网络安全公告。在近24小时内,被入侵的action仍然可用 активно从数千家组织泄露凭证。
我们分享了我们的响应时间线:
- 下午5:00 UTC:初步调查确认了入侵
- 晚上8:00 UTC:社区通知并识别受影响的仓库
- 次日,下午2:00 UTC:GitHub完全删除了该action
- 次日,晚上10:00 UTC:GitHub恢复了清理后的仓库
经验教训与建议
我们的演讲以四个具体的建议结束,这些建议在观众中引起了强烈共鸣:
- 为CI/CD运行器实施安全监控:组织为笔记本电脑和生产环境有监控,但对CI/CD运行器通常完全没有可见性。
- 强制执行Action允许列表:GitHub Marketplace上有超过25000个action,筛选是必不可少的。
- 将Action固定到特定提交SHA:使用提交SHA而不是可变标签的组织没有受到此次事件的影响。
- 制定事件响应计划:我们展示了组织在识别被入侵的工作流和轮换凭证方面面临的真实挑战。
攻击者的 sophistication
特别吸引黑帽大会观众的是我们对攻击者规避技术的分析:
- 使用合法的GitHub域名来避免检测
- 嵌入利用代码以避免网络连接
- 采用冒名提交来保持仓库历史干净
- 冒充renovate-bot等合法用户
正如我们在演讲中指出的:"没有任何传统安全工具会将这些标记为恶意,这就是这次攻击可怕而巧妙的地方。"
展望未来
演讲以一种在整个会议期间引起共鸣的严峻思考结束:"这些攻击蓝图现在已经公开。下一个攻击不会只是在构建日志中转储密钥。下一个攻击不会仅仅入侵两个action,而且它可能已经在你的CI/CD管道中。"
随着供应链攻击变得越来越复杂,安全社区必须从基于签名的检测发展到行为分析和异常检测。
对于希望深入了解技术细节的人,您可以在此下载我们完整的黑帽2025演讲幻灯片。
这次黑帽演讲对StepSecurity来说是一个里程碑,并加强了我们保护软件供应链的承诺。来自安全社区的验证以及演讲后进行的深入讨论证实,CI/CD安全不再是锦上添花,而是任何组织安全态势的关键组成部分。