漏洞概述
一个针对流行GitHub Action “tj-actions/changed-files”的供应链攻击已被确认,该漏洞被标记为CVE-2025-30066[citation:5]。攻击者入侵了该Action项目,并篡改了其多个历史版本标签(如v1.0.0、v35.7.7-sec、v44.5.1),使其指向一个包含恶意代码的特定提交(SHA: 0e58ed8671d6b60d0890c21b07f8835ace038e67)[citation:1]。在2025年3月14日至15日期间,任何使用受影响版本(45.0.7及之前版本)的CI/CD工作流都存在风险[citation:1]。据估计,此次事件影响了超过23,000个代码仓库[citation:1][citation:2]。该漏洞已在v46.0.1版本中得到修复[citation:1]。
攻击技术细节
攻击载体与恶意代码
攻击的本质是供应链攻击和嵌入式恶意代码[citation:1][citation:4]。攻击者获得了一个用于自动化流程的GitHub个人访问令牌(PAT),并利用它修改了“tj-actions/changed-files”的代码[citation:2]。
被注入的恶意代码会在GitHub Actions的Runner(工作流运行器)中执行一个Python脚本。该脚本的核心功能是从Runner Worker进程的内存中提取机密信息(Secrets)[citation:1]。
具体的恶意命令如下:
|
|
这条命令从外部地址下载一个Python脚本(memdump.py)并以root权限执行。该脚本会扫描内存,寻找并提取机密数据,然后将其进行双重Base64编码,最终输出到GitHub Actions的工作流日志中[citation:1][citation:10]。这使得机密信息可能对拥有日志访问权限的人(尤其是公共仓库)可见。
泄露的机密类型
可能被泄露的敏感信息包括但不限于[citation:4][citation:10]:
- GitHub个人访问令牌(PATs)
- 云服务API密钥(如AWS访问密钥)
- npm令牌
- 私有的RSA密钥
- 其他在CI/CD环境中使用的密码和令牌
影响与风险分析
- 直接影响:使用该Action的仓库,其CI/CD流程中使用的所有密钥和令牌都可能被泄露至日志中,面临被窃取的风险[citation:1]。
- 主要风险方:拥有公共仓库的组织面临最高风险,因为其工作流日志默认是公开的,泄露的机密可能已被广泛查看[citation:1]。
- 潜在后果:攻击者可以利用窃取的凭证获得对源代码仓库、云基础设施和生产环境的未授权访问,进而可能引发进一步的攻击[citation:1]。
- CVSS评分:该漏洞的CVSS v3.1评分为8.6(高危)[citation:4][citation:5]。
检测与响应措施
如何检测是否受影响
- 检查工作流运行时间:审查所有在2025年3月14日至15日之间运行的、使用了
tj-actions/changed-files的工作流[citation:1]。 - 审查日志:检查相关工作流日志的“changed-files”步骤,寻找异常的大段Base64编码输出[citation:1]。
- 解码验证:对日志中可疑的Base64字符串使用以下命令进行解码(因为数据被双重编码):
如果输出包含看似令牌或密钥的数据,则表明机密可能已泄露[citation:1]。
1echo ‘可疑的Base64字符串’ | base64 -d | base64 -d - 网络流量监控:使用如
Harden-Runner等安全工具,可以检测工作流是否曾向恶意域名(如gist.githubusercontent.com)发起未经授权的网络请求[citation:1]。
必须采取的修复行动
如果检测到受影响,必须立即按顺序执行以下步骤[citation:1][citation:10]:
- 立即撤销并轮换所有已暴露的机密:将所有在受影响工作流中使用的API密钥、令牌、密码等视为已泄露,并立即进行更换。这是最重要的一步[citation:2][citation:10]。
- 更新工作流配置:
- 如果工作流中直接引用了恶意的提交SHA(
0e58ed8671d6b60d0890c21b07f8835ace038e67),必须立即更新引用[citation:1]。 - 将Action的引用更新至已修复的版本
v46.0.1或更高版本[citation:4][citation:10]。 - 值得注意的是,被篡改的版本标签(如v44.5.1)事后已被官方修复并指向安全代码,但直接升级到最新版是最佳实践[citation:1]。
- 如果工作流中直接引用了恶意的提交SHA(
安全建议与最佳实践
为防止类似供应链攻击,建议采取以下长期安全加固措施:
- 固定提交哈希值(PIN by SHA):在使用第三方GitHub Actions时,避免使用易变动的标签(如
@v1),而是固定到某个经过验证的、完整的提交哈希值(例如uses: actions/checkout@a81bbbf8292c0d03ea7322f6c42d7b0998f6c8e8)。这是社区在此次事件后强烈推荐的最关键安全实践[citation:7][citation:8]。 - 审核第三方依赖:仅使用来自可信赖维护者和知名来源的Actions[citation:2]。
- 定期轮换机密:即使没有安全事件,也应定期轮换CI/CD中使用的凭据。
- 使用安全工具:考虑集成安全扫描工具,对代码库和工作流进行自动化安全审计。
- 遵循官方指南:参考GitHub官方提供的GitHub Actions安全强化指南 [citation:1]。