事件概述

近日,安全研究人员StepSecurity披露了一起针对GitHub Actions生态的严重供应链攻击事件。攻击者瞄上了GitHub Actions市场中的热门工作流项目——actions-cool/issues-helper(用于自动化Issue管理的开源Action)及其关联项目actions-cool/maintain-one-comment,通过极其隐蔽的"移花接木"手法,将恶意代码精准植入这些被全球开发者广泛引用的工作流中。

与传统供应链攻击不同,这次攻击的核心技术在于冒名提交(Imposter Commit)污染标签(Poisoned Tags)的组合运用。攻击者不仅在代码中植入恶意功能,更关键的是将仓库中所有历史标签重新指向这个恶意提交。这意味着,任何使用版本标签(如v1.0、v2.1等)引用这些Action的工作流,在下一次运行时都会自动拉取并执行攻击者的恶意代码。

本次攻击使用的外泄域名t.m-kosche.com与此前针对npm生态@antv供应链的攻击活动存在明确关联,幕后黑手指向名为Mini Shai-Hulud的威胁组织。该组织近年来持续活跃于开源软件供应链领域,具备成熟的攻击能力和明确的攻击意图。

攻击手法深度剖析

第一层伪装:冒名提交的艺术

本次攻击的核心技术手段是冒名提交(Imposter Commit)。这是一种在开源社区中极具欺骗性的攻击技术,攻击者通过以下方式实施:

  1. 获取仓库提交权限:攻击者首先需要获得仓库的写权限,可能通过以下途径:
    • 窃取维护者账户凭据
    • 利用GitHub API Token泄露
    • 社会工程学攻击获取访问权限
  2. 创建隐蔽恶意提交:攻击者直接向仓库推送一个包含恶意代码的提交。这个提交在Git历史中看起来与正常提交无异,但其内容已经被注入了凭据窃取功能。
  3. 绕过代码审查机制:由于冒名提交是直接推送到主分支(而非通过Pull Request),它可以绕过很多项目采用的PR代码审查流程。对于维护者来说,如果他们没有启用分支保护或强制代码审查,这个恶意提交就会直接进入主线代码。 这种攻击手法的狡猾之处在于:它利用了开发者对"活跃仓库"和"可信提交"的信任。当开发者检查代码变更时,可能只会关注功能逻辑,而忽略了这个提交实际上是在执行一个精心设计的凭据窃取程序。

第二层渗透:污染标签的重定向攻击

如果说冒名提交是入场的"门票",那么污染标签(Poisoned Tags)就是大范围扩散的"加速器"。

GitHub Actions的工作流通常通过版本标签来引用依赖的Action,格式如下:

steps:

- uses: actions-cool/issues-helper@v2.1

攻击者巧妙地利用了Git的标签机制——标签本质上只是一个指向特定提交的指针。通过简单的Git命令,攻击者可以将所有现有标签重新指向恶意提交:

# 将所有标签强制移动到恶意提交

git tag -f v1.0 v2.0 v2.1 ...

git push origin --tags --force

这就造成了一个极其危险的后果:

  • 对于使用版本标签引用的工作流:每次运行都会执行恶意代码
  • 对于使用特定提交SHA引用的工作流:不受影响(前提是SHA指向的是污染前的干净提交)
  • 对于直接引用主分支的工作流:风险最高,因为主分支已被直接污染

调查显示,仅在actions-cool/maintain-one-comment这一个仓库中,就有15个标签被成功污染。这意味着任何使用这些版本标签的工作流都处于高度危险之中。

技术实现细节:内存读取与凭据外泄

恶意代码的技术实现同样值得深入分析。根据StepSecurity的分析报告,攻击者的技术路线如下:

第一步:环境准备与工具下载

恶意代码的首要任务是下载必要的运行环境。不同于传统的JavaScript运行时(Node.js),攻击者选择了Bun——这是一个相对较新的JavaScript运行时,以其高性能著称。这种选择可能有以下考量:

  • 减小检测面:Bun不是GitHub Actions的默认组件,静态分析工具可能没有针对它的规则
  • 绕过监控:部分安全工具的检测规则基于Node.js进程特征,对Bun无效
  • 快速执行:Bun的启动速度更快,恶意活动窗口更短

第二步:内存读取与凭据提取

核心恶意功能是从GitHub Actions Runner进程中提取凭据。GitHub Actions的工作流程大致如下:

  1. GitHub服务器触发工作流
  2. Runner(运行器)在托管虚拟机上启动
  3. Runner.Worker进程负责任务调度和执行
  4. 敏感凭据(如GITHUB_TOKEN、AWS密钥等)存储在Worker进程的内存中 恶意代码通过读取Runner.Worker进程的内存空间来提取这些凭据。这是一个相当高级的技术操作,因为:
    • 现代操作系统有进程隔离保护
    • 需要理解进程内存布局
    • 需要绕过ASLR等安全机制

第三步:数据外泄

提取的凭据通过加密信道外传到攻击者控制的域名t.m-kosche.com

根据奇安信威胁情报中心的分析数据,该域名:

  • 安全判定:恶意(Security Status: Malicious)
  • 关联恶意家族:通用远控木马(Generic Trojan)
  • 涉及平台:Windows
  • 涉及TTPs
  • T1071:应用层协议 - 攻击者使用DNS和HTTP协议进行C2通信
  • T1132:数据编码 - 传输数据经过编码处理以躲避检测
  • 域名注册时间:2026年5月15日(攻击前夕刚注册)
  • 有效期:至2027年5月15日

这个域名与此前针对@antv生态系统的npm供应链攻击活动存在重叠,表明Mini Shai-Hulud组织正在系统性地扩展其供应链攻击版图。

威胁组织归因:Mini Shai-Hulud组织分析

组织背景

Mini Shai-Hulud是近年来在供应链攻击领域活跃的威胁组织。该组织得名于经典科幻小说《沙丘》中的沙漠巨兽,暗示其对开源生态系统的"吞噬"意图。

该组织的主要活动特征包括:

  • 攻击领域:开源软件供应链,尤其是JavaScript/TypeScript生态系统
  • 攻击手法:供应链投毒、冒名提交、依赖混淆
  • 目标范围:npm包、GitHub Actions、PyPI包等
  • 战术特点:利用开发者对知名项目的信任,精准定位CI/CD管道

攻击能力演进

从本次攻击可以看出Mini Shai-Hulud的战术演进:

演进维度

早期活动

当前活动

攻击载体

npm包

GitHub Actions

传播方式

依赖混淆攻击

污染标签攻击

隐蔽程度

劫持正规包名

入侵真实项目

持久化能力

临时投毒

标签重定向

目标价值

开发环境

生产CI/CD

组织正在从"仿冒"走向"渗透",直接从内部攻破可信赖的开源项目,这使得检测难度大幅提升。

影响范围评估

直接影响

本次攻击的影响范围取决于工作流引用方式:

高风险场景(使用版本标签引用):

- uses: actions-cool/issues-helper@v2.1

- uses: actions-cool/issues-helper@latest

这些工作流在下次运行时将执行恶意代码

中风险场景(直接引用分支):

- uses: actions-cool/issues-helper@main

分支已被污染,风险等同

低风险场景(固定完整SHA):

- uses: actions-cool/issues-helper@a1b2c3d4e5f6...

只要SHA指向污染前的提交即安全

潜在影响

被窃取的CI/CD凭据可能导致:

  1. 代码仓库被入侵:攻击者获取源代码访问权限
  2. 构建环境被控制:植入后门到正式发布版本
  3. 云资源被滥用:利用窃取的云API凭据挖矿或进一步横向移动
  4. 供应链下游攻击:通过污染发布版本感染下游用户

行业分布

由于actions-cool/issues-helper是GitHub Actions市场的热门项目,其用户覆盖:

  • 软件开发团队
  • DevOps/SRE团队
  • 自动化测试流程
  • CI/CD安全扫描流程

这些用户普遍具有以下特点:较高的安全意识但同时掌握敏感资源,成为攻击者的"高价值目标"。

防护建议

立即行动项

  1. 停止使用受影响Action:将以下仓库从工作流中移除或替换:
    • actions-cool/issues-helper
    • actions-cool/maintain-one-comment
  2. 轮换CI/CD凭据:由于可能已被窃取,必须轮换所有在GitHub Actions中使用的凭据,包括:
    • GitHub Personal Access Token
    • 云服务商访问密钥(AWS、Azure、GCP)
    • 部署密钥
    • 环境变量中的敏感信息
  3. 检查访问日志:审查GitHub仓库的访问和推送日志,寻找异常活动

长期防护措施

  1. 版本引用策略
    • 优先使用完整提交SHA引用Action
    • 避免使用@latest或分支引用
    • 定期审查并锁定依赖版本
  2. Action安全审计
    • 审查所有第三方Action的代码
    • 关注Action的网络请求行为
    • 限制Action的权限范围(使用最小权限原则)
  3. GitHub安全配置
    • 启用分支保护规则
    • 要求PR必须经过代码审查
    • 启用推送签名验证
    • 启用依赖项审查
  4. 运行时监控
    • 监控GitHub Actions运行时的网络流量
    • 关注异常的进程创建和文件下载行为
    • 部署运行时安全检测工具

MITRE ATT&CK技术映射

技术ID

技术名称

在本次攻击中的体现

T1195

供应链攻陷

入侵开源Action仓库

T1195.001

供应链投毒

通过污染标签植入恶意代码

T1071

应用层协议

使用DNS/HTTP协议外泄数据

T1132

数据编码

窃取数据经过编码处理

T1056

输入捕获

从进程内存读取凭据

T1552

非认证凭据获取

从CI/CD环境提取凭据

IOC指标汇总

失陷指标

类型

指标

描述

域名

t.m-kosche.com

数据外泄C2服务器

URL

t.m-kosche.com:443/api/public/otel/v1/traces

HTTP外泄端点

恶意仓库

actions-cool/issues-helper

主攻陷仓库

恶意仓库

actions-cool/maintain-one-comment

关联攻陷仓库(15个污染标签)

技术特征

特征

描述

恶意工具

Bun JavaScript运行时

攻击目标

GitHub Runner.Worker进程内存

窃取目标

CI/CD管道凭据

攻击手法

冒名提交 + 污染标签

总结

本次GitHub Actions供应链攻击代表了软件供应链安全领域的一个危险趋势:攻击者正在从"外部仿冒"转向"内部渗透",直接攻陷真实的、受信任的开源项目。Mini Shai-Hulud组织展现的战术成熟度——从冒名提交到标签重定向,从npm生态到Actions生态——表明这是一个有组织、有耐心的威胁行为体。

对于安全社区而言,这一事件再次敲响了警钟:开源不等于安全,可信不等于无害。随着CI/CD系统在软件交付中的核心地位日益凸显,针对这一环节的攻击将成为APT组织的重点突破方向。

参考来源

  • StepSecurity研究披露:https://thehackernews.com/2026/05/github-actions-supply-chain-attack.html
  • The Hacker News报道:https://thehackernews.com/2026/05/github-actions-supply-chain-attack.html

声明:本文来自奇安信威胁情报中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。