Skip to content
Fencer Vulns
critical 9.6

CVE-2026-45321 kev+ ransomware in the critical feed json

Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys

published 2026-05-12 5 mo ago modified 2026-10-26 13 d ago also GHSA-g7cv-rxg3-hmpx , EUVD-2026-29352

cvss
9.6
version 3.1, CNA
cisa kev
Exploited
added 2026-05-27, used in ransomware
epss
3.3%
EPSS 3.3% chance of exploitation in 30 days, percentile 88%
public exploits
0
none known

Summary

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.

Patch / fix

cisa required action Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

  • npm @tanstack/arktype-adapter 1.166.16
  • npm @tanstack/eslint-plugin-router 1.161.13
  • npm @tanstack/eslint-plugin-start 0.0.8
  • npm @tanstack/history 1.161.13
  • npm @tanstack/nitro-v2-vite-plugin 1.154.16
  • npm @tanstack/react-router 1.169.9
  • npm @tanstack/react-router-devtools 1.166.20
  • npm @tanstack/react-router-ssr-query 1.166.19
  • npm @tanstack/react-start 1.167.72
  • npm @tanstack/react-start-client 1.166.55
  • npm @tanstack/react-start-rsc 0.0.51
  • npm @tanstack/react-start-server 1.166.59
  • npm @tanstack/router-cli 1.166.50
  • npm @tanstack/router-core 1.169.9
  • npm @tanstack/router-devtools 1.166.20
  • npm @tanstack/router-devtools-core 1.167.10
  • npm @tanstack/router-generator 1.166.49
  • npm @tanstack/router-plugin 1.167.42
  • npm @tanstack/router-ssr-query-core 1.168.7
  • npm @tanstack/router-utils 1.161.15
  • npm @tanstack/router-vite-plugin 1.166.57
  • npm @tanstack/solid-router 1.169.9
  • npm @tanstack/solid-router-devtools 1.166.20
  • npm @tanstack/solid-router-ssr-query 1.166.19
  • npm @tanstack/solid-start 1.167.69
  • npm @tanstack/solid-start-client 1.166.54
  • npm @tanstack/solid-start-server 1.166.58
  • npm @tanstack/start-client-core 1.168.9
  • npm @tanstack/start-fn-stubs 1.161.13
  • npm @tanstack/start-plugin-core 1.169.27

Timeline

  1. Published
  2. CISA SSVC: exploitation active
  3. Added to CISA KEV
  4. CISA patch deadline

Known exploited

Added
5 mo ago
Patch by
2026-06-10 (5 mo ago)
Ransomware
Known to be used in ransomware campaigns
Required action
Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.
Vendor, product
TanStack, TanStack
CISA name
TanStack Unspecified Vulnerability

CISA SSVC

Exploitation
Active, exploited in the wild
Automatable
no
Technical impact
total
Assessed
5 mo ago

Exploit prediction

3.28% chance of exploitation in the next 30 days, higher than 88% of all scored CVEs (FIRST EPSS, 2026-11-08).

Exploits and checks

  • tanstack.com https://tanstack.com/blog/npm-supply-chain-compromise-postmortem referenced PoC, tagged "exploit" by a source, unverified
  • stepsecurity.io https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem referenced PoC, tagged "exploit" by a source, unverified

CVSS scores

assigned by version score vector
CNA 3.1 9.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
GitHub 3.1 9.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Affected packages

ecosystem package affected fixed in
npm @tanstack/arktype-adapter
>=1.166.12, <1.166.16
>=1.166.15, <1.166.16
1.166.16
npm @tanstack/eslint-plugin-router
>=1.161.9, <1.161.13
>=1.161.12, <1.161.13
1.161.13
npm @tanstack/eslint-plugin-start
>=0.0.4, <0.0.8
>=0.0.7, <0.0.8
0.0.8
npm @tanstack/history
>=1.161.9, <1.161.13
>=1.161.12, <1.161.13
1.161.13
npm @tanstack/nitro-v2-vite-plugin
>=1.154.12, <1.154.16
>=1.154.15, <1.154.16
1.154.16
npm @tanstack/react-router
>=1.169.5, <1.169.9
>=1.169.8, <1.169.9
1.169.9
npm @tanstack/react-router-devtools
>=1.166.16, <1.166.20
>=1.166.19, <1.166.20
1.166.20
npm @tanstack/react-router-ssr-query
>=1.166.15, <1.166.19
>=1.166.18, <1.166.19
1.166.19
npm @tanstack/react-start
>=1.167.68, <1.167.72
>=1.167.71, <1.167.72
1.167.72
npm @tanstack/react-start-client
>=1.166.51, <1.166.55
>=1.166.54, <1.166.55
1.166.55
npm @tanstack/react-start-rsc
>=0.0.47, <0.0.51
>=0.0.50, <0.0.51
0.0.51
npm @tanstack/react-start-server
>=1.166.55, <1.166.59
>=1.166.58, <1.166.59
1.166.59
npm @tanstack/router-cli
>=1.166.46, <1.166.50
>=1.166.49, <1.166.50
1.166.50
npm @tanstack/router-core
>=1.169.5, <1.169.9
>=1.169.8, <1.169.9
1.169.9
npm @tanstack/router-devtools
>=1.166.16, <1.166.20
>=1.166.19, <1.166.20
1.166.20
npm @tanstack/router-devtools-core
>=1.167.6, <1.167.10
>=1.167.9, <1.167.10
1.167.10
npm @tanstack/router-generator
>=1.166.45, <1.166.49
>=1.166.48, <1.166.49
1.166.49
npm @tanstack/router-plugin
>=1.167.38, <1.167.42
>=1.167.41, <1.167.42
1.167.42
npm @tanstack/router-ssr-query-core
>=1.168.3, <1.168.7
>=1.168.6, <1.168.7
1.168.7
npm @tanstack/router-utils
>=1.161.11, <1.161.15
>=1.161.14, <1.161.15
1.161.15
npm @tanstack/router-vite-plugin
>=1.166.53, <1.166.57
>=1.166.56, <1.166.57
1.166.57
npm @tanstack/solid-router
>=1.169.5, <1.169.9
>=1.169.8, <1.169.9
1.169.9
npm @tanstack/solid-router-devtools
>=1.166.16, <1.166.20
>=1.166.19, <1.166.20
1.166.20
npm @tanstack/solid-router-ssr-query
>=1.166.15, <1.166.19
>=1.166.18, <1.166.19
1.166.19
npm @tanstack/solid-start
>=1.167.65, <1.167.69
>=1.167.68, <1.167.69
1.167.69
npm @tanstack/solid-start-client
>=1.166.50, <1.166.54
>=1.166.53, <1.166.54
1.166.54
npm @tanstack/solid-start-server
>=1.166.54, <1.166.58
>=1.166.57, <1.166.58
1.166.58
npm @tanstack/start-client-core
>=1.168.5, <1.168.9
>=1.168.8, <1.168.9
1.168.9
npm @tanstack/start-fn-stubs
>=1.161.9, <1.161.13
>=1.161.12, <1.161.13
1.161.13
npm @tanstack/start-plugin-core
>=1.169.23, <1.169.27
>=1.169.26, <1.169.27
1.169.27
npm @tanstack/start-server-core
>=1.167.33, <1.167.37
>=1.167.36, <1.167.37
1.167.37
npm @tanstack/start-static-server-functions
>=1.166.44, <1.166.48
>=1.166.47, <1.166.48
1.166.48
npm @tanstack/start-storage-context
>=1.166.38, <1.166.42
>=1.166.41, <1.166.42
1.166.42
npm @tanstack/valibot-adapter
>=1.166.12, <1.166.16
>=1.166.15, <1.166.16
1.166.16
npm @tanstack/virtual-file-routes
>=1.161.10, <1.161.14
>=1.161.13, <1.161.14
1.161.14
npm @tanstack/vue-router
>=1.169.5, <1.169.9
>=1.169.8, <1.169.9
1.169.9
npm @tanstack/vue-router-devtools
>=1.166.16, <1.166.20
>=1.166.19, <1.166.20
1.166.20
npm @tanstack/vue-router-ssr-query
>=1.166.15, <1.166.19
>=1.166.18, <1.166.19
1.166.19
npm @tanstack/vue-start
>=1.167.61, <1.167.65
>=1.167.64, <1.167.65
1.167.65
npm @tanstack/vue-start-client
>=1.166.46, <1.166.50
>=1.166.49, <1.166.50
1.166.50
npm @tanstack/vue-start-server
>=1.166.50, <1.166.54
>=1.166.53, <1.166.54
1.166.54
npm @tanstack/zod-adapter
>=1.166.12, <1.166.16
>=1.166.15, <1.166.16
1.166.16

Affected products

  • @tanstack arktype-adapter
  • @tanstack eslint-plugin-router
  • @tanstack eslint-plugin-start
  • @tanstack history
  • @tanstack nitro-v2-vite-plugin
  • @tanstack react-router
  • @tanstack react-router-devtools
  • @tanstack react-router-ssr-query
  • @tanstack react-start
  • @tanstack react-start-client
  • @tanstack react-start-rsc
  • @tanstack react-start-server
  • @tanstack router-cli
  • @tanstack router-core
  • @tanstack router-devtools
  • @tanstack router-devtools-core
  • @tanstack router-generator
  • @tanstack router-plugin
  • @tanstack router-ssr-query-core
  • @tanstack router-utils
  • @tanstack outer-vite-plugin
  • @tanstack solid-router
  • @tanstack solid-router-devtools
  • @tanstack solid-router-ssr-query
  • @tanstack solid-start
  • @tanstack solid-start-client
  • @tanstack solid-start-server
  • @tanstack start-client-core
  • @tanstack start-fn-stubs
  • @tanstack start-plugin-core
  • @tanstack start-server-core
  • @tanstack start-static-server-functions
  • @tanstack start-storage-context
  • @tanstack valibot-adapter
  • @tanstack virtual-file-routes
  • @tanstack vue-router
  • @tanstack vue-router-devtools
  • @tanstack vue-router-ssr-query
  • @tanstack vue-start
  • @tanstack vue-start-client
  • @tanstack vue-start-server
  • @tanstack zod-adapter

Classification

Weakness

References

Sources

Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.