Poisoned Pipeline / Incidents / AS197
actions-cool GitHub Action tags still serve Mini Shai-Hulud after re-enablement
Git / GitHubGitHub ActionsVS Code / IDEAI coding agents
On 18 May 2026 an attacker moved all 53 tags of actions-cool/issues-helper
and all 15 tags of actions-cool/maintain-one-comment to unsigned
"Build action for <tag>" commits. The malicious action.yml runs a Bun
payload first, then the real action so the workflow still succeeds.
GitHub disabled both repositories on 19 May (terms-of-service), which
stopped downloads. On 16 September 2026 both repositories became
reachable again with the May tags still pointing at the payload, so
every workflow that pins by tag rather than SHA resumed executing it.
SafeDep found six newly infected default branches between 20 and 24
September (jd-opensource/micro-app, MaaXYZ/MaaFramework,
ant-design/pro-components, Moonofweisheng/wot-design-uni,
vbenjs/vben-admin-thin-next, nineaiyu/xadmin-client). The payload
reads the ghs_ token from Runner.Worker memory, commits .claude/ and
.vscode/tasks.json hooks (github-actions[bot], GraphQL), and on a
developer machine installs kitty-monitor. Byte-identical to the May
Mini Shai-Hulud build (blob 2931c1be, 500,143 bytes); C2
t.m-kosche.com. The payload also writes 127.0.0.1 stepsecurity.io
entries on the runner. Socket reports ~15,000 dependents of
issues-helper. Tags were not cleaned before re-enablement.
SafeDep’s September 2026 follow-up: six more repositories (micro-app,
MaaFramework, ant-design/pro-components, wot-design-uni, vben-admin,
xadmin-client) received the hook files between 20–24 September — four
months after the tag hijack, the 53+15 tags still point at the malicious
commits. Payload adds Claude Code SessionStart and VS Code tasks hooks
(kitty-monitor backdoor, gh-token monitor, a wiper that runs on 40x or
@cap-js deprecation), blocks stepsecurity.io via /etc/hosts, and commits
as verified github-actions[bot] via GraphQL.
Mapped techniques
- T0122 Vulnerability in third-party CI/CD actions
- T0121 Compromised legitimate artifact
- T0109 Publish malicious artifact
- T0159 Malicious artifact execution
- T0183 Harvesting short-lived token
- T0140 Harvest tokens from environment variables
- T0193 Sensitive information in environment variables
- T0202 Inadequate CI/CD workflow permissions
- T0169 Push implants across repositories
- T0210 Poison AI coding-agent config or workspace
- T0152 IDE
- T0176 Disable or misconfigure security measures
- T0168 Exfiltration to code repositories
supply-chain Hijacked actions-cool tags
Workflows that call actions-cool/issues-helper or maintain-one-comment by mutable tag.
Real actions-cool issue-bot actions; tags rewritten 18 May 2026, still malicious in September.
53 issues-helper tags and 15 maintain-one-comment tags moved to wrapper commits that run Bun then the real action.
oven-sh/setup-bun then bun run $GITHUB_ACTION_PATH/index.js on the runner before the housekeeping step.
Payload reads the ghs_ token from Runner.Worker memory.
CI secrets available to the composite action are stolen, then used to commit into the consuming repo.
Issue-bot workflows often run on schedule or issue events with a repo token.
GITHUB_TOKEN was enough to push verified github-actions[bot] commits onto default branches.
Six public default branches received .claude/ and .vscode hook commits 20–24 September 2026.
.claude/settings.json SessionStart and .vscode/tasks.json run node .claude/setup.mjs on folder open.
VS Code folderOpen task downloads Bun 1.3.14 and runs the same index.js on the developer machine.
Payload sudo-writes 127.0.0.1 stepsecurity.io entries into /etc/hosts on the runner.
Commits go through the GraphQL API with the victim repository token so GitHub shows them as verified.
Framework gaps noted
- Mutable-tag reactivation after a GitHub disablement (containment that left the tags in place) is not a named technique.
- Reading ghs_ from Runner.Worker process memory is more specific than T0183.
Sources
- https://www.stepsecurity.io/blog/actions-cool-issues-helper-github-action-compromised-all-tags-point-to-imposter-commit-that-exfiltrates-ci-cd-credentials
- https://pumasecurity.io/resources/blog/teampcp-github-actions-supply-chain/
- https://safedep.io/mini-shai-hulud-reinfection-github-repositories
- https://socket.dev/blog/mini-shai-hulud-actions