Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys
Malware in 42 @tanstack/* npm packages, installed on 2026-05-11, runs at install time and steals cloud, GitHub and SSH credentials. Pin to versions published before 2026-05-11 19:00 UTC.
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Listed in CISA KEV
- How many real-world setups can hit the bug, from the vendor's advisory and CISA data. It does not know your setup.What do these mean? →
- Actively exploited
- Fix
- Fixed in 1.166.16, 1.161.13, 0.0.8, 1.154.16, 1.169.9, and 23 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
The affected software is 42 TanStack npm packages (the @tanstack/* family) published to the npm registry, which developers install as JavaScript libraries. Malicious versions of these packages can steal cloud credentials, GitHub tokens, and SSH keys from anyone who installs them.
Summarized by anthropic/claude-haiku-5.5. Verify details against the original sources.
Read the original description
On 2026-05-11, between approximately 19:20 and 19:26 UTC, 84 malicious versions across 42 @tanstack/* packages were published to the npm registry. The publishes were authenticated via the legitimate GitHub Actions OIDC trusted-publisher binding for TanStack/router, but the publish workflow itself was not modified. The attacker chained three known vulnerability classes — a pull_request_target "Pwn Request" misconfiguration, GitHub Actions cache poisoning across the fork↔base trust boundary, and runtime memory extraction of the OIDC token from the Actions runner process — to publish credential-stealing malware under a trusted identity. Each affected package received exactly two malicious versions, published a few minutes apart.
Timeline
- CVE published
- Added to CISA KEV
CISA has evidence of exploitation in the wild
- CISA remediation deadline
Due date for US federal agencies to patch
- Record last updated
Affected versions
- @tanstack arktype-adapter
1.166.12, 1.166.15
- @tanstack eslint-plugin-router
1.161.9, 1.161.12
- @tanstack eslint-plugin-start
0.0.4, 0.0.7
- @tanstack history
1.161.9, 1.161.12
- @tanstack nitro-v2-vite-plugin
1.154.12, 1.154.15
- @tanstack react-router
1.169.5, 1.169.8
- @tanstack react-router-devtools
1.166.16, 1.166.19
- @tanstack react-router-ssr-query
1.166.15, 1.166.18
- @tanstack react-start
1.167.68, 1.167.71
- @tanstack react-start-client
1.166.51, 1.166.54
- @tanstack react-start-rsc
0.0.47, 0.0.50
- @tanstack react-start-server
1.166.55, 1.166.58
- @tanstack router-cli
1.166.46, 1.166.49
- @tanstack router-core
1.169.5, 1.169.8
- @tanstack router-devtools
1.166.16, 1.166.19
- @tanstack router-devtools-core
1.167.6, 1.167.9
- @tanstack router-generator
1.166.45, 1.166.48
- @tanstack router-plugin
1.167.38, 1.167.41
- @tanstack router-ssr-query-core
1.168.3, 1.168.6
- @tanstack router-utils
1.161.11, 1.161.14
- @tanstack outer-vite-plugin
1.166.53, 1.166.56
- @tanstack solid-router
1.169.5, 1.169.8
- @tanstack solid-router-devtools
1.166.16, 1.166.19
- @tanstack solid-router-ssr-query
1.166.15, 1.166.18
- @tanstack solid-start
1.167.65, 1.167.68
- @tanstack solid-start-client
1.166.50, 1.166.53
- @tanstack solid-start-server
1.166.54, 1.166.57
- @tanstack start-client-core
1.168.5, 1.168.8
- @tanstack start-fn-stubs
1.161.9, 1.161.12
- @tanstack start-plugin-core
1.169.23, 1.169.26
- @tanstack start-server-core
1.167.33, 1.167.36
- @tanstack start-static-server-functions
1.166.44, 1.166.47
- @tanstack start-storage-context
1.166.38, 1.166.41
- @tanstack valibot-adapter
1.166.12, 1.166.15
- @tanstack virtual-file-routes
1.161.10, 1.161.13
- @tanstack vue-router
1.169.5, 1.169.8
- @tanstack vue-router-devtools
1.166.16, 1.166.19
- @tanstack vue-router-ssr-query
1.166.15, 1.166.18
- @tanstack vue-start
1.167.61, 1.167.64
- @tanstack vue-start-client
1.166.46, 1.166.49
- @tanstack vue-start-server
1.166.50, 1.166.53
- @tanstack zod-adapter
1.166.12, 1.166.15
- @tanstack/arktype-adapternpm
From 1.166.12 · fixed in 1.166.16
- @tanstack/eslint-plugin-routernpm
From 1.161.9 · fixed in 1.161.13
- @tanstack/eslint-plugin-startnpm
From 0.0.4 · fixed in 0.0.8
- @tanstack/historynpm
From 1.161.9 · fixed in 1.161.13
- @tanstack/nitro-v2-vite-pluginnpm
From 1.154.12 · fixed in 1.154.16
- @tanstack/react-routernpm
From 1.169.5 · fixed in 1.169.9
- @tanstack/react-router-devtoolsnpm
From 1.166.16 · fixed in 1.166.20
- @tanstack/react-router-ssr-querynpm
From 1.166.15 · fixed in 1.166.19
- @tanstack/react-startnpm
From 1.167.68 · fixed in 1.167.72
- @tanstack/react-start-clientnpm
From 1.166.51 · fixed in 1.166.55
- @tanstack/react-start-rscnpm
From 0.0.47 · fixed in 0.0.51
- @tanstack/react-start-servernpm
From 1.166.55 · fixed in 1.166.59
- @tanstack/router-clinpm
From 1.166.46 · fixed in 1.166.50
- @tanstack/router-corenpm
From 1.169.5 · fixed in 1.169.9
- @tanstack/router-devtoolsnpm
From 1.166.16 · fixed in 1.166.20
- @tanstack/router-devtools-corenpm
From 1.167.6 · fixed in 1.167.10
- @tanstack/router-generatornpm
From 1.166.45 · fixed in 1.166.49
- @tanstack/router-pluginnpm
From 1.167.38 · fixed in 1.167.42
- @tanstack/router-ssr-query-corenpm
From 1.168.3 · fixed in 1.168.7
- @tanstack/router-utilsnpm
From 1.161.11 · fixed in 1.161.15
- @tanstack/router-vite-pluginnpm
From 1.166.53 · fixed in 1.166.57
- @tanstack/solid-routernpm
From 1.169.5 · fixed in 1.169.9
- @tanstack/solid-router-devtoolsnpm
From 1.166.16 · fixed in 1.166.20
- @tanstack/solid-router-ssr-querynpm
From 1.166.15 · fixed in 1.166.19
- @tanstack/solid-startnpm
From 1.167.65 · fixed in 1.167.69
- @tanstack/solid-start-clientnpm
From 1.166.50 · fixed in 1.166.54
- @tanstack/solid-start-servernpm
From 1.166.54 · fixed in 1.166.58
- @tanstack/start-client-corenpm
From 1.168.5 · fixed in 1.168.9
- @tanstack/start-fn-stubsnpm
From 1.161.9 · fixed in 1.161.13
- @tanstack/start-plugin-corenpm
From 1.169.23 · fixed in 1.169.27
- @tanstack/start-server-corenpm
From 1.167.33 · fixed in 1.167.37
- @tanstack/start-static-server-functionsnpm
From 1.166.44 · fixed in 1.166.48
- @tanstack/start-storage-contextnpm
From 1.166.38 · fixed in 1.166.42
- @tanstack/valibot-adapternpm
From 1.166.12 · fixed in 1.166.16
- @tanstack/virtual-file-routesnpm
From 1.161.10 · fixed in 1.161.14
- @tanstack/vue-routernpm
From 1.169.5 · fixed in 1.169.9
- @tanstack/vue-router-devtoolsnpm
From 1.166.16 · fixed in 1.166.20
- @tanstack/vue-router-ssr-querynpm
From 1.166.15 · fixed in 1.166.19
- @tanstack/vue-startnpm
From 1.167.61 · fixed in 1.167.65
- @tanstack/vue-start-clientnpm
From 1.166.46 · fixed in 1.166.50
- @tanstack/vue-start-servernpm
From 1.166.50 · fixed in 1.166.54
- @tanstack/zod-adapternpm
From 1.166.12 · fixed in 1.166.16
- @tanstack/arktype-adapternpm
From 1.166.15 · fixed in 1.166.16
- @tanstack/eslint-plugin-routernpm
From 1.161.12 · fixed in 1.161.13
- @tanstack/eslint-plugin-startnpm
From 0.0.7 · fixed in 0.0.8
- @tanstack/historynpm
From 1.161.12 · fixed in 1.161.13
- @tanstack/nitro-v2-vite-pluginnpm
From 1.154.15 · fixed in 1.154.16
- @tanstack/react-routernpm
From 1.169.8 · fixed in 1.169.9
- @tanstack/react-router-devtoolsnpm
From 1.166.19 · fixed in 1.166.20
- @tanstack/react-router-ssr-querynpm
From 1.166.18 · fixed in 1.166.19
- @tanstack/react-startnpm
From 1.167.71 · fixed in 1.167.72
- @tanstack/react-start-clientnpm
From 1.166.54 · fixed in 1.166.55
- @tanstack/react-start-rscnpm
From 0.0.50 · fixed in 0.0.51
- @tanstack/react-start-servernpm
From 1.166.58 · fixed in 1.166.59
- @tanstack/router-clinpm
From 1.166.49 · fixed in 1.166.50
- @tanstack/router-corenpm
From 1.169.8 · fixed in 1.169.9
- @tanstack/router-devtoolsnpm
From 1.166.19 · fixed in 1.166.20
- @tanstack/router-devtools-corenpm
From 1.167.9 · fixed in 1.167.10
- @tanstack/router-generatornpm
From 1.166.48 · fixed in 1.166.49
- @tanstack/router-pluginnpm
From 1.167.41 · fixed in 1.167.42
- @tanstack/router-ssr-query-corenpm
From 1.168.6 · fixed in 1.168.7
- @tanstack/router-utilsnpm
From 1.161.14 · fixed in 1.161.15
- @tanstack/router-vite-pluginnpm
From 1.166.56 · fixed in 1.166.57
- @tanstack/solid-routernpm
From 1.169.8 · fixed in 1.169.9
- @tanstack/solid-router-devtoolsnpm
From 1.166.19 · fixed in 1.166.20
- @tanstack/solid-router-ssr-querynpm
From 1.166.18 · fixed in 1.166.19
- @tanstack/solid-startnpm
From 1.167.68 · fixed in 1.167.69
- @tanstack/solid-start-clientnpm
From 1.166.53 · fixed in 1.166.54
- @tanstack/solid-start-servernpm
From 1.166.57 · fixed in 1.166.58
- @tanstack/start-client-corenpm
From 1.168.8 · fixed in 1.168.9
- @tanstack/start-fn-stubsnpm
From 1.161.12 · fixed in 1.161.13
- @tanstack/start-plugin-corenpm
From 1.169.26 · fixed in 1.169.27
- @tanstack/start-server-corenpm
From 1.167.36 · fixed in 1.167.37
- @tanstack/start-static-server-functionsnpm
From 1.166.47 · fixed in 1.166.48
- @tanstack/start-storage-contextnpm
From 1.166.41 · fixed in 1.166.42
- @tanstack/valibot-adapternpm
From 1.166.15 · fixed in 1.166.16
- @tanstack/virtual-file-routesnpm
From 1.161.13 · fixed in 1.161.14
- @tanstack/vue-routernpm
From 1.169.8 · fixed in 1.169.9
- @tanstack/vue-router-devtoolsnpm
From 1.166.19 · fixed in 1.166.20
- @tanstack/vue-router-ssr-querynpm
From 1.166.18 · fixed in 1.166.19
- @tanstack/vue-startnpm
From 1.167.64 · fixed in 1.167.65
- @tanstack/vue-start-clientnpm
From 1.166.49 · fixed in 1.166.50
- @tanstack/vue-start-servernpm
From 1.166.53 · fixed in 1.166.54
- @tanstack/zod-adapternpm
From 1.166.15 · fixed in 1.166.16
References 4
GitHub · TanStack/router
tanstack.com
Questions about CVE-2026-45321
What does this mean?
The malware runs during install and harvests cloud metadata and secrets (AWS, GCP, Kubernetes, Vault), npm tokens, GitHub tokens and SSH private keys from the install host. It sends them out over the Session/Oxen file-upload network and can republish the victim's other packages with the same malware.Source: github.com
Am I affected, and how do I check?
The advisory lists specific affected versions for 42 @tanstack/* packages, and the payload runs only when one of those versions is installed with npm, pnpm or yarn on 2026-05-11. To check, compare the installed @tanstack/* versions in your lockfile or the output of npm ls against the advisory's list.Source: github.com
What should I do about it?
Pin every @tanstack/* dependency to a version published before 2026-05-11 19:00 UTC. The advisory lists the fixed version for each affected package.Source: github.com
Is it being exploited?
Yes. CISA added it to its Known Exploited Vulnerabilities catalog on 2026-05-27, which means it has evidence of attacks. No public exploit code is tracked.Source: cisa.gov, cve.now feed data