Poisoned Pipeline / Incidents / AS16
TanStack Mini Shai-Hulud (CVE-2026-45321)
npmGitHub ActionsAI coding agentsVS Code / IDEDeveloper workstation
On 11 May 2026, 84 malicious versions of 42 @tanstack/* npm packages were
published (GHSA-g7cv-rxg3-hmpx / CVE-2026-45321). TanStack traced the
compromise to a chained GitHub Actions attack (pull_request_target plus
cache poisoning). The payload stole cloud, GitHub, and SSH credentials,
persisted in Claude Code and VS Code, and could commit stolen data to
attacker-controlled GitHub repositories. OpenAI reported two employee
devices hit and limited unauthorized access to internal repos. CrowdSec
later tied a May 22 copy of ~170 private repositories to a laptop
infected in this wave.
Mapped techniques
- T0147 Scan public CI/CD configurations for secrets and vulnerable actions
- T0122 Vulnerability in third-party CI/CD actions
- T0202 Inadequate CI/CD workflow permissions
- T0109 Publish malicious artifact
- T0121 Compromised legitimate artifact
- T0158 Vulnerable CI/CD template
- T0151 Installation scripts
- T0159 Malicious artifact execution
- T0140 Harvest tokens from environment variables
- T0193 Sensitive information in environment variables
- T0168 Exfiltration to code repositories
- T0154 Malicious IDE extension
- T0152 IDE
- T0166 Trigger pipeline execution
- T0183 Harvesting short-lived token
- T0169 Push implants across repositories
- T0186 Source code leak
- T0201 Customers compromised
supply-chain TanStack npm packages
The publish path was a public GitHub Actions workflow that could be
chained (pull_request_target and cache poisoning).
TanStack traced the compromise to a chained GitHub Actions attack
involving pull_request_target and Actions cache poisoning.
The workflow identity could publish packages; poisoned cache plus
privileged pull_request_target made that durable.
84 versions across 42 @tanstack packages were published to npm.
Consumers of the real @tanstack scope received the poisoned versions.
A reusable/privileged workflow pattern (pull_request_target) was the
injection template, not a one-off script.
post-supply-chain Downstream developer machines and vendors
An optional GitHub-hosted dependency used a prepare lifecycle hook
(Bun) to run the JavaScript payload.
Installing an affected version ran the credential stealer.
Cloud, GitHub, and CI secrets in the process environment were stolen.
The stealer profiled the environment and collected tokens sitting in env.
Stolen data was committed to attacker-controlled GitHub repositories
via the GraphQL API using stolen tokens.
Persistence hooks were installed into Claude Code and VS Code so the
stealer re-ran on IDE launch.
Re-execution was tied to IDE launch, not only to npm install.
Injected GitHub Actions workflows serialized repository secrets and
uploaded them.
GitHub Actions OIDC / job tokens and short-lived cloud creds were in
the harvest set.
Injected GitHub Actions workflows and stolen tokens were used to
persist across repositories the victim could write.
CrowdSec later attributed a copy of ~170 private repositories to a
laptop infected in this wave.
Downstream organizations (OpenAI, CrowdSec, Mistral AI, others) were
the realized victims of the poisoned packages.
Framework gaps noted
- GitHub Actions cache poisoning as a first-class technique is still folded into T0122.
- Persistence inside AI coding agents (Claude Code) is only approximated by T0154/T0152.
Sources
- https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx
- https://openai.com/index/our-response-to-the-tanstack-npm-supply-chain-attack/
- https://www.crowdsec.net/blog/tanstack-supply-chain-attack-analysis
- https://www.stepsecurity.io/blog/state-of-open-source-supply-chain-attacks
- https://opensourcemalware.com/blog/teampcp-mini-shai-hulud-tanstack-opensearch-and-mistral
- https://opensourcemalware.com/blog/mini-shai-hulud-weaponizes-tasks-json-files
- https://safedep.io/redhat-cloud-services-hit-by-mini-shai-hulud-npm-worm
- https://safedep.io/mini-shai-hulud-strikes-again-314-npm-packages-compromised
- https://safedep.io/tanstack-github-actions-cache-poisoning
- https://safedep.io/mass-npm-supply-chain-attack-tanstack-mistral
- https://safedep.io/mini-shai-hulud-and-sap-compromise
- https://www.reversinglabs.com/blog/red-hat-cloud-service-npm-packages-backdoored-in-72-seconds
- https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack
- https://socket.dev/blog/mini-shai-hulud-campaign-hits-red-hat-cloud-services-npm-packages
- https://socket.dev/blog/antv-packages-compromised
- https://www.stepsecurity.io/blog/a-mini-shai-hulud-has-appeared
- https://unit42.paloaltonetworks.com/monitoring-npm-supply-chain-attacks/