CVE-2026-45321
Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.6
Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys
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.
- Record
CVE-2026-45321- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-506
- Updated
- 2026-11-02
EUVDEUVD-2026-29352
9.6
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.
- Record
EUVD-2026-29352- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-g7cv-rxg3-hmpx
9.6
Malware in @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys
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.
Impact
A user installing any affected version executes a payload (~2.3 MB obfuscated router_init.js) at install time that:
- Harvests credentials from common locations:
- AWS instance metadata (IMDS) and Secrets Manager
- GCP metadata service
- Kubernetes service-account tokens
- HashiCorp Vault tokens
~/.npmrc(npm tokens)- GitHub tokens (env vars,
ghCLI config,.git-credentials) - SSH private keys (
~/.ssh/)
- Exfiltrates harvested data over the Session/Oxen messenger file-upload network (
filev2.getsession.org,seed{1,2,3}.getsession.org). This is end-to-end encrypted with no attacker-controlled C2, so blocking by IP or domain is the only network mitigation. - Enumerates packages that the victim maintains via
registry.npmjs.org/-/v1/search?text=maintainer:<user>and republishes them with the same injection, propagating the compromise across npm.
Any developer or CI environment that ran npm install, pnpm install, or yarn install against an affected version on 2026-05-11 should be considered compromised. All credentials accessible to the install process should be rotated immediately. Cloud audit logs should be reviewed for activity originating from the affected hosts during and after the install window.
Detection
Inspect the published manifest of any pinned @tanstack/* version. Malicious manifests contain this exact optionalDependencies entry:
"optionalDependencies": {
"@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c"
}
To check a version without running install scripts:
npm pack @tanstack/<name>@<version> # downloads tarball; does NOT execute lifecycle scripts
tar -xzf *.tgz
grep -A3 optionalDependencies package/package.json
ls -la package/router_init.js # malicious payload, ~2.3 MB, present at package root
The payload file router_init.js is approximately 2.3 MB of obfuscated JavaScript. It is placed at the tarball root and is intentionally not declared in the package's "files" array, so it does not appear in the package's documented contents.
Mechanism
@tanstack/setup is not a real package on the npm registry. The github:tanstack/router#79ac49ee... specifier resolves to an orphan commit pushed to a fork in the tanstack/router GitHub fork network. GitHub serves commits across the entire fork network for git-URL dependencies, so the attacker did not require write access to TanStack/router itself — only the ability to fork and push to their own fork.
When npm processes the optional dependency, it:
- Fetches the orphan commit from the fork network.
- Installs the commit's declared dependencies (which include a real
bunbinary). - Runs the commit's
preparelifecycle script:bun run tanstack_runner.js && exit 1. The trailingexit 1causes the optional install to fail, after which npm silently discards it — leaving nonode_modulestrace. - The
tanstack_runner.jsscript in turn executesrouter_init.jsfrom the host package's tarball.
Patches
Affected versions are being deprecated on npm with a SECURITY: notice. Where npm policy allows (no existing third-party dependents), affected versions are also being unpublished.…
- Record
GHSA-g7cv-rxg3-hmpx- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-506
- Updated
- 2026-11-02
CISA KEV No score
TanStack Unspecified Vulnerability
TanStack contains an unspecified vulnerability that allowed malicious versions of the product to be published to the npm registry to publish credential-stealing malware under a trusted identity.
- Record
CVE-2026-45321- Updated
- 2026-11-02
NVD
9.6
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.
- Record
CVE-2026-45321- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-506
- Updated
- 2026-11-02
OSV
9.6
Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys
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.
- Record
CVE-2026-45321- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-506
- Updated
- 2026-11-02
OSVGHSA-g7cv-rxg3-hmpx
9.6
Malware in @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys
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.
Impact
A user installing any affected version executes a payload (~2.3 MB obfuscated router_init.js) at install time that:
- Harvests credentials from common locations:
- AWS instance metadata (IMDS) and Secrets Manager
- GCP metadata service
- Kubernetes service-account tokens
- HashiCorp Vault tokens
~/.npmrc(npm tokens)- GitHub tokens (env vars,
ghCLI config,.git-credentials) - SSH private keys (
~/.ssh/)
- Exfiltrates harvested data over the Session/Oxen messenger file-upload network (
filev2.getsession.org,seed{1,2,3}.getsession.org). This is end-to-end encrypted with no attacker-controlled C2, so blocking by IP or domain is the only network mitigation. - Enumerates packages that the victim maintains via
registry.npmjs.org/-/v1/search?text=maintainer:<user>and republishes them with the same injection, propagating the compromise across npm.
Any developer or CI environment that ran npm install, pnpm install, or yarn install against an affected version on 2026-05-11 should be considered compromised. All credentials accessible to the install process should be rotated immediately. Cloud audit logs should be reviewed for activity originating from the affected hosts during and after the install window.
Detection
Inspect the published manifest of any pinned @tanstack/* version. Malicious manifests contain this exact optionalDependencies entry:
"optionalDependencies": {
"@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c"
}
To check a version without running install scripts:
npm pack @tanstack/<name>@<version> # downloads tarball; does NOT execute lifecycle scripts
tar -xzf *.tgz
grep -A3 optionalDependencies package/package.json
ls -la package/router_init.js # malicious payload, ~2.3 MB, present at package root
The payload file router_init.js is approximately 2.3 MB of obfuscated JavaScript. It is placed at the tarball root and is intentionally not declared in the package's "files" array, so it does not appear in the package's documented contents.
Mechanism
@tanstack/setup is not a real package on the npm registry. The github:tanstack/router#79ac49ee... specifier resolves to an orphan commit pushed to a fork in the tanstack/router GitHub fork network. GitHub serves commits across the entire fork network for git-URL dependencies, so the attacker did not require write access to TanStack/router itself — only the ability to fork and push to their own fork.
When npm processes the optional dependency, it:
- Fetches the orphan commit from the fork network.
- Installs the commit's declared dependencies (which include a real
bunbinary). - Runs the commit's
preparelifecycle script:bun run tanstack_runner.js && exit 1. The trailingexit 1causes the optional install to fail, after which npm silently discards it — leaving nonode_modulestrace. - The
tanstack_runner.jsscript in turn executesrouter_init.jsfrom the host package's tarball.
Patches
Affected versions are being deprecated on npm with a SECURITY: notice. Where npm policy allows (no existing third-party dependents), affected versions are also being unpublished.…
- Record
GHSA-g7cv-rxg3-hmpx- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - Weakness
- CWE-506
- Updated
- 2026-11-02
Affected products
- tanstack
- tanstack tanstack\/arktype-adapter
- tanstack tanstack\/eslint-plugin-router
- tanstack tanstack\/eslint-plugin-start
- tanstack tanstack\/history
- tanstack tanstack\/nitro-v2-vite-plugin
- tanstack tanstack\/react-router
- tanstack tanstack\/react-router-devtools
- tanstack tanstack\/react-router-ssr-query
- tanstack tanstack\/react-start
- tanstack tanstack\/react-start-client
- tanstack tanstack\/react-start-rsc
Show 202 moreShow less
- tanstack tanstack\/react-start-server
- tanstack tanstack\/router-cli
- tanstack tanstack\/router-core
- tanstack tanstack\/router-devtools
- tanstack tanstack\/router-devtools-core
- tanstack tanstack\/router-generator
- tanstack tanstack\/router-plugin
- tanstack tanstack\/router-ssr-query-core
- tanstack tanstack\/router-utils
- tanstack tanstack\/router-vite-plugin
- tanstack tanstack\/solid-router
- tanstack tanstack\/solid-router-devtools
- tanstack tanstack\/solid-router-ssr-query
- tanstack tanstack\/solid-start
- tanstack tanstack\/solid-start-client
- tanstack tanstack\/solid-start-server
- tanstack tanstack\/start-client-core
- tanstack tanstack\/start-fn-stubs
- tanstack tanstack\/start-plugin-core
- tanstack tanstack\/start-server-core
- tanstack tanstack\/start-static-server-functions
- tanstack tanstack\/start-storage-context
- tanstack tanstack\/valibot-adapter
- tanstack tanstack\/virtual-file-routes
- tanstack tanstack\/vue-router
- tanstack tanstack\/vue-router-devtools
- tanstack tanstack\/vue-router-ssr-query
- tanstack tanstack\/vue-start
- tanstack tanstack\/vue-start-client
- tanstack tanstack\/vue-start-server
- tanstack tanstack\/zod-adapter
- @tanstack arktype-adapter
- @tanstack eslint-plugin-router
- @tanstack eslint-plugin-start
- @tanstack history
- @tanstack nitro-v2-vite-plugin
- @tanstack outer-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 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
- abhishake1 supersurkhet\/cli
- abhishake1 supersurkhet\/sdk
- abhishake1 taskflow-corp\/cli
- agentworkhq agentwork-cli
- antoinebcx ml-toolkit-ts
- antoinebcx ml-toolkit-ts\/preprocessing
- antoinebcx ml-toolkit-ts\/xgboost
- beproduct beproduct\/nestjs-auth
- christianalares git-git-git
- christianalares git branch selector
- christianalares nextmove-mcp
- christianalares tolka\/cli
- dirigible dirigible-ai\/sdk
- guardrailsai guardrails ai
- kilbot tallyui\/components
- kilbot tallyui\/connector-medusa
- kilbot tallyui\/connector-shopify
- kilbot tallyui\/connector-vendure
- kilbot tallyui\/connector-woocommerce
- kilbot tallyui\/core
- kilbot tallyui\/database
- kilbot tallyui\/pos
- kilbot tallyui\/storage-sqlite
- kilbot tallyui\/theme
- linuxfoundation opensearch
- matheuspergoli draftauth\/client
- matheuspergoli draftauth\/core
- matheuspergoli draftlab\/auth
- matheuspergoli draftlab\/auth-router
- matheuspergoli draftlab\/db
- matheuspergoli simple type-safe actions
- mesa mesadev\/rest
- mesa mesadev\/saguaro
- mesa mesadev\/sdk
- mistral mistralai
- mistral mistralai\/mistralai
- mistral mistralai\/mistralai-azure
- mistral mistralai\/mistralai-gcp
- multiagentcognition cmux-agent-mcp
- neilcochran cross-stitch
- neilcochran squawk\/airports
- neilcochran squawk\/airspace
- neilcochran squawk\/airspace-data
- neilcochran squawk\/airway-data
- neilcochran squawk\/airways
- neilcochran squawk\/fix-data
- neilcochran squawk\/fixes
- neilcochran squawk\/flight-math
- neilcochran squawk\/flightplan
- neilcochran squawk\/geo
- neilcochran squawk\/icao-registry
- neilcochran squawk\/icao-registry-data
- neilcochran squawk\/mcp
- neilcochran squawk\/navaid-data
- neilcochran squawk\/navaids
- neilcochran squawk\/notams
- neilcochran squawk\/procedure-data
- neilcochran squawk\/procedures
- neilcochran squawk\/types
- neilcochran squawk\/units
- neilcochran squawk\/weather
- neilcochran ts-dna
- neilcochran wot-api
- uipath uipath\/access-policy-sdk
- uipath uipath\/access-policy-tool
- uipath uipath\/admin-tool
- uipath uipath\/agent-sdk
- uipath uipath\/agent-tool
- uipath uipath\/agent.sdk
- uipath uipath\/aops-policy-tool
- uipath uipath\/ap-chat
- uipath uipath\/api-workflow-tool
- uipath uipath\/apollo-core
- uipath uipath\/apollo-react
- uipath uipath\/apollo-wind
- uipath uipath\/auth
- uipath uipath\/case-tool
- uipath uipath\/cli
- uipath uipath\/codedagent-tool
- uipath uipath\/codedagents-tool
- uipath uipath\/codedapp-tool
- uipath uipath\/common
- uipath uipath\/context-grounding-tool
- uipath uipath\/data-fabric-tool
- uipath uipath\/docsai-tool
- uipath uipath\/filesystem
- uipath uipath\/flow-tool
- uipath uipath\/functions-tool
- uipath uipath\/gov-tool
- uipath uipath\/identity-tool
- uipath uipath\/insights-sdk
- uipath uipath\/insights-tool
- uipath uipath\/integrationservice-sdk
- uipath uipath\/integrationservice-tool
- uipath uipath\/llmgw-tool
- uipath uipath\/maestro-sdk
- uipath uipath\/maestro-tool
- uipath uipath\/orchestrator-tool
- uipath uipath\/packager-tool-apiworkflow
- uipath uipath\/packager-tool-bpmn
- uipath uipath\/packager-tool-case
- uipath uipath\/packager-tool-connector
- uipath uipath\/packager-tool-flow
- uipath uipath\/packager-tool-functions
- uipath uipath\/packager-tool-webapp
- uipath uipath\/packager-tool-workflowcompiler
- uipath uipath\/packager-tool-workflowcompiler-browser
- uipath uipath\/platform-tool
- uipath uipath\/project-packager
- uipath uipath\/resource-tool
- uipath uipath\/resourcecatalog-tool
- uipath uipath\/resources-tool
- uipath uipath\/robot
- uipath uipath\/rpa-legacy-tool
- uipath uipath\/rpa-tool
- uipath uipath\/solution-packager
- uipath uipath\/solution-tool
- uipath uipath\/solutionpackager-sdk
- uipath uipath\/solutionpackager-tool-core
- uipath uipath\/tasks-tool
- uipath uipath\/telemetry
- uipath uipath\/test-manager-tool
- uipath uipath\/tool-workflowcompiler
- uipath uipath\/traces-tool
- uipath uipath\/ui-widgets-multi-file-upload
- uipath uipath\/uipath-python-bridge
- uipath uipath\/vertical-solutions-tool
- uipath uipath\/vss
- uipath uipath\/widget.sdk
Affected packages
| Package | Affected | Fixed |
|---|---|---|
@tanstack/arktype-adapternpm |
1.166.12 to 1.166.12 | 1.166.16 |
@tanstack/eslint-plugin-routernpm |
1.161.9 to 1.161.9 | 1.161.13 |
@tanstack/eslint-plugin-startnpm |
0.0.4 to 0.0.4 | 0.0.8 |
@tanstack/historynpm |
1.161.9 to 1.161.9 | 1.161.13 |
@tanstack/nitro-v2-vite-pluginnpm |
1.154.12 to 1.154.12 | 1.154.16 |
@tanstack/react-routernpm |
1.169.5 to 1.169.5 | 1.169.9 |
@tanstack/react-router-devtoolsnpm |
1.166.16 to 1.166.16 | 1.166.20 |
@tanstack/react-router-ssr-querynpm |
1.166.15 to 1.166.15 | 1.166.19 |
@tanstack/react-startnpm |
1.167.68 to 1.167.68 | 1.167.72 |
@tanstack/react-start-clientnpm |
1.166.51 to 1.166.51 | 1.166.55 |
Show 158 moreShow less
| Package | Affected | Fixed |
|---|---|---|
@tanstack/react-start-rscnpm |
0.0.47 to 0.0.47 | 0.0.51 |
@tanstack/react-start-servernpm |
1.166.55 to 1.166.55 | 1.166.59 |
@tanstack/router-clinpm |
1.166.46 to 1.166.46 | 1.166.50 |
@tanstack/router-corenpm |
1.169.5 to 1.169.5 | 1.169.9 |
@tanstack/router-devtoolsnpm |
1.166.16 to 1.166.16 | 1.166.20 |
@tanstack/router-devtools-corenpm |
1.167.6 to 1.167.6 | 1.167.10 |
@tanstack/router-generatornpm |
1.166.45 to 1.166.45 | 1.166.49 |
@tanstack/router-pluginnpm |
1.167.38 to 1.167.38 | 1.167.42 |
@tanstack/router-ssr-query-corenpm |
1.168.3 to 1.168.3 | 1.168.7 |
@tanstack/router-utilsnpm |
1.161.11 to 1.161.11 | 1.161.15 |
@tanstack/router-vite-pluginnpm |
1.166.53 to 1.166.53 | 1.166.57 |
@tanstack/solid-routernpm |
1.169.5 to 1.169.5 | 1.169.9 |
@tanstack/solid-router-devtoolsnpm |
1.166.16 to 1.166.16 | 1.166.20 |
@tanstack/solid-router-ssr-querynpm |
1.166.15 to 1.166.15 | 1.166.19 |
@tanstack/solid-startnpm |
1.167.65 to 1.167.65 | 1.167.69 |
@tanstack/solid-start-clientnpm |
1.166.50 to 1.166.50 | 1.166.54 |
@tanstack/solid-start-servernpm |
1.166.54 to 1.166.54 | 1.166.58 |
@tanstack/start-client-corenpm |
1.168.5 to 1.168.5 | 1.168.9 |
@tanstack/start-fn-stubsnpm |
1.161.9 to 1.161.9 | 1.161.13 |
@tanstack/start-plugin-corenpm |
1.169.23 to 1.169.23 | 1.169.27 |
@tanstack/start-server-corenpm |
1.167.33 to 1.167.33 | 1.167.37 |
@tanstack/start-static-server-functionsnpm |
1.166.44 to 1.166.44 | 1.166.48 |
@tanstack/start-storage-contextnpm |
1.166.38 to 1.166.38 | 1.166.42 |
@tanstack/valibot-adapternpm |
1.166.12 to 1.166.12 | 1.166.16 |
@tanstack/virtual-file-routesnpm |
1.161.10 to 1.161.10 | 1.161.14 |
@tanstack/vue-routernpm |
1.169.5 to 1.169.5 | 1.169.9 |
@tanstack/vue-router-devtoolsnpm |
1.166.16 to 1.166.16 | 1.166.20 |
@tanstack/vue-router-ssr-querynpm |
1.166.15 to 1.166.15 | 1.166.19 |
@tanstack/vue-startnpm |
1.167.61 to 1.167.61 | 1.167.65 |
@tanstack/vue-start-clientnpm |
1.166.46 to 1.166.46 | 1.166.50 |
@tanstack/vue-start-servernpm |
1.166.50 to 1.166.50 | 1.166.54 |
@tanstack/zod-adapternpm |
1.166.12 to 1.166.12 | 1.166.16 |
@tanstack/arktype-adapternpm |
1.166.15 to 1.166.15 | 1.166.16 |
@tanstack/eslint-plugin-routernpm |
1.161.12 to 1.161.12 | 1.161.13 |
@tanstack/eslint-plugin-startnpm |
0.0.7 to 0.0.7 | 0.0.8 |
@tanstack/historynpm |
1.161.12 to 1.161.12 | 1.161.13 |
@tanstack/nitro-v2-vite-pluginnpm |
1.154.15 to 1.154.15 | 1.154.16 |
@tanstack/react-routernpm |
1.169.8 to 1.169.8 | 1.169.9 |
@tanstack/react-router-devtoolsnpm |
1.166.19 to 1.166.19 | 1.166.20 |
@tanstack/react-router-ssr-querynpm |
1.166.18 to 1.166.18 | 1.166.19 |
@tanstack/react-startnpm |
1.167.71 to 1.167.71 | 1.167.72 |
@tanstack/react-start-clientnpm |
1.166.54 to 1.166.54 | 1.166.55 |
@tanstack/react-start-rscnpm |
0.0.50 to 0.0.50 | 0.0.51 |
@tanstack/react-start-servernpm |
1.166.58 to 1.166.58 | 1.166.59 |
@tanstack/router-clinpm |
1.166.49 to 1.166.49 | 1.166.50 |
@tanstack/router-corenpm |
1.169.8 to 1.169.8 | 1.169.9 |
@tanstack/router-devtoolsnpm |
1.166.19 to 1.166.19 | 1.166.20 |
@tanstack/router-devtools-corenpm |
1.167.9 to 1.167.9 | 1.167.10 |
@tanstack/router-generatornpm |
1.166.48 to 1.166.48 | 1.166.49 |
@tanstack/router-pluginnpm |
1.167.41 to 1.167.41 | 1.167.42 |
@tanstack/router-ssr-query-corenpm |
1.168.6 to 1.168.6 | 1.168.7 |
@tanstack/router-utilsnpm |
1.161.14 to 1.161.14 | 1.161.15 |
@tanstack/router-vite-pluginnpm |
1.166.56 to 1.166.56 | 1.166.57 |
@tanstack/solid-routernpm |
1.169.8 to 1.169.8 | 1.169.9 |
@tanstack/solid-router-devtoolsnpm |
1.166.19 to 1.166.19 | 1.166.20 |
@tanstack/solid-router-ssr-querynpm |
1.166.18 to 1.166.18 | 1.166.19 |
@tanstack/solid-startnpm |
1.167.68 to 1.167.68 | 1.167.69 |
@tanstack/solid-start-clientnpm |
1.166.53 to 1.166.53 | 1.166.54 |
@tanstack/solid-start-servernpm |
1.166.57 to 1.166.57 | 1.166.58 |
@tanstack/start-client-corenpm |
1.168.8 to 1.168.8 | 1.168.9 |
@tanstack/start-fn-stubsnpm |
1.161.12 to 1.161.12 | 1.161.13 |
@tanstack/start-plugin-corenpm |
1.169.26 to 1.169.26 | 1.169.27 |
@tanstack/start-server-corenpm |
1.167.36 to 1.167.36 | 1.167.37 |
@tanstack/start-static-server-functionsnpm |
1.166.47 to 1.166.47 | 1.166.48 |
@tanstack/start-storage-contextnpm |
1.166.41 to 1.166.41 | 1.166.42 |
@tanstack/valibot-adapternpm |
1.166.15 to 1.166.15 | 1.166.16 |
@tanstack/virtual-file-routesnpm |
1.161.13 to 1.161.13 | 1.161.14 |
@tanstack/vue-routernpm |
1.169.8 to 1.169.8 | 1.169.9 |
@tanstack/vue-router-devtoolsnpm |
1.166.19 to 1.166.19 | 1.166.20 |
@tanstack/vue-router-ssr-querynpm |
1.166.18 to 1.166.18 | 1.166.19 |
@tanstack/vue-startnpm |
1.167.64 to 1.167.64 | 1.167.65 |
@tanstack/vue-start-clientnpm |
1.166.49 to 1.166.49 | 1.166.50 |
@tanstack/vue-start-servernpm |
1.166.53 to 1.166.53 | 1.166.54 |
@tanstack/zod-adapternpm |
1.166.15 to 1.166.15 | 1.166.16 |
@tanstack/arktype-adapternpm |
1.166.12 up to 1.166.16 | 1.166.16 |
@tanstack/eslint-plugin-routernpm |
1.161.9 up to 1.161.13 | 1.161.13 |
@tanstack/eslint-plugin-startnpm |
0.0.4 up to 0.0.8 | 0.0.8 |
@tanstack/historynpm |
1.161.9 up to 1.161.13 | 1.161.13 |
@tanstack/nitro-v2-vite-pluginnpm |
1.154.12 up to 1.154.16 | 1.154.16 |
@tanstack/react-routernpm |
1.169.5 up to 1.169.9 | 1.169.9 |
@tanstack/react-router-devtoolsnpm |
1.166.16 up to 1.166.20 | 1.166.20 |
@tanstack/react-router-ssr-querynpm |
1.166.15 up to 1.166.19 | 1.166.19 |
@tanstack/react-startnpm |
1.167.68 up to 1.167.72 | 1.167.72 |
@tanstack/react-start-clientnpm |
1.166.51 up to 1.166.55 | 1.166.55 |
@tanstack/react-start-rscnpm |
0.0.47 up to 0.0.51 | 0.0.51 |
@tanstack/react-start-servernpm |
1.166.55 up to 1.166.59 | 1.166.59 |
@tanstack/router-clinpm |
1.166.46 up to 1.166.50 | 1.166.50 |
@tanstack/router-corenpm |
1.169.5 up to 1.169.9 | 1.169.9 |
@tanstack/router-devtoolsnpm |
1.166.16 up to 1.166.20 | 1.166.20 |
@tanstack/router-devtools-corenpm |
1.167.6 up to 1.167.10 | 1.167.10 |
@tanstack/router-generatornpm |
1.166.45 up to 1.166.49 | 1.166.49 |
@tanstack/router-pluginnpm |
1.167.38 up to 1.167.42 | 1.167.42 |
@tanstack/router-ssr-query-corenpm |
1.168.3 up to 1.168.7 | 1.168.7 |
@tanstack/router-utilsnpm |
1.161.11 up to 1.161.15 | 1.161.15 |
@tanstack/router-vite-pluginnpm |
1.166.53 up to 1.166.57 | 1.166.57 |
@tanstack/solid-routernpm |
1.169.5 up to 1.169.9 | 1.169.9 |
@tanstack/solid-router-devtoolsnpm |
1.166.16 up to 1.166.20 | 1.166.20 |
@tanstack/solid-router-ssr-querynpm |
1.166.15 up to 1.166.19 | 1.166.19 |
@tanstack/solid-startnpm |
1.167.65 up to 1.167.69 | 1.167.69 |
@tanstack/solid-start-clientnpm |
1.166.50 up to 1.166.54 | 1.166.54 |
@tanstack/solid-start-servernpm |
1.166.54 up to 1.166.58 | 1.166.58 |
@tanstack/start-client-corenpm |
1.168.5 up to 1.168.9 | 1.168.9 |
@tanstack/start-fn-stubsnpm |
1.161.9 up to 1.161.13 | 1.161.13 |
@tanstack/start-plugin-corenpm |
1.169.23 up to 1.169.27 | 1.169.27 |
@tanstack/start-server-corenpm |
1.167.33 up to 1.167.37 | 1.167.37 |
@tanstack/start-static-server-functionsnpm |
1.166.44 up to 1.166.48 | 1.166.48 |
@tanstack/start-storage-contextnpm |
1.166.38 up to 1.166.42 | 1.166.42 |
@tanstack/valibot-adapternpm |
1.166.12 up to 1.166.16 | 1.166.16 |
@tanstack/virtual-file-routesnpm |
1.161.10 up to 1.161.14 | 1.161.14 |
@tanstack/vue-routernpm |
1.169.5 up to 1.169.9 | 1.169.9 |
@tanstack/vue-router-devtoolsnpm |
1.166.16 up to 1.166.20 | 1.166.20 |
@tanstack/vue-router-ssr-querynpm |
1.166.15 up to 1.166.19 | 1.166.19 |
@tanstack/vue-startnpm |
1.167.61 up to 1.167.65 | 1.167.65 |
@tanstack/vue-start-clientnpm |
1.166.46 up to 1.166.50 | 1.166.50 |
@tanstack/vue-start-servernpm |
1.166.50 up to 1.166.54 | 1.166.54 |
@tanstack/zod-adapternpm |
1.166.12 up to 1.166.16 | 1.166.16 |
@tanstack/arktype-adapternpm |
1.166.15 up to 1.166.16 | 1.166.16 |
@tanstack/eslint-plugin-routernpm |
1.161.12 up to 1.161.13 | 1.161.13 |
@tanstack/eslint-plugin-startnpm |
0.0.7 up to 0.0.8 | 0.0.8 |
@tanstack/historynpm |
1.161.12 up to 1.161.13 | 1.161.13 |
@tanstack/nitro-v2-vite-pluginnpm |
1.154.15 up to 1.154.16 | 1.154.16 |
@tanstack/react-routernpm |
1.169.8 up to 1.169.9 | 1.169.9 |
@tanstack/react-router-devtoolsnpm |
1.166.19 up to 1.166.20 | 1.166.20 |
@tanstack/react-router-ssr-querynpm |
1.166.18 up to 1.166.19 | 1.166.19 |
@tanstack/react-startnpm |
1.167.71 up to 1.167.72 | 1.167.72 |
@tanstack/react-start-clientnpm |
1.166.54 up to 1.166.55 | 1.166.55 |
@tanstack/react-start-rscnpm |
0.0.50 up to 0.0.51 | 0.0.51 |
@tanstack/react-start-servernpm |
1.166.58 up to 1.166.59 | 1.166.59 |
@tanstack/router-clinpm |
1.166.49 up to 1.166.50 | 1.166.50 |
@tanstack/router-corenpm |
1.169.8 up to 1.169.9 | 1.169.9 |
@tanstack/router-devtoolsnpm |
1.166.19 up to 1.166.20 | 1.166.20 |
@tanstack/router-devtools-corenpm |
1.167.9 up to 1.167.10 | 1.167.10 |
@tanstack/router-generatornpm |
1.166.48 up to 1.166.49 | 1.166.49 |
@tanstack/router-pluginnpm |
1.167.41 up to 1.167.42 | 1.167.42 |
@tanstack/router-ssr-query-corenpm |
1.168.6 up to 1.168.7 | 1.168.7 |
@tanstack/router-utilsnpm |
1.161.14 up to 1.161.15 | 1.161.15 |
@tanstack/router-vite-pluginnpm |
1.166.56 up to 1.166.57 | 1.166.57 |
@tanstack/solid-routernpm |
1.169.8 up to 1.169.9 | 1.169.9 |
@tanstack/solid-router-devtoolsnpm |
1.166.19 up to 1.166.20 | 1.166.20 |
@tanstack/solid-router-ssr-querynpm |
1.166.18 up to 1.166.19 | 1.166.19 |
@tanstack/solid-startnpm |
1.167.68 up to 1.167.69 | 1.167.69 |
@tanstack/solid-start-clientnpm |
1.166.53 up to 1.166.54 | 1.166.54 |
@tanstack/solid-start-servernpm |
1.166.57 up to 1.166.58 | 1.166.58 |
@tanstack/start-client-corenpm |
1.168.8 up to 1.168.9 | 1.168.9 |
@tanstack/start-fn-stubsnpm |
1.161.12 up to 1.161.13 | 1.161.13 |
@tanstack/start-plugin-corenpm |
1.169.26 up to 1.169.27 | 1.169.27 |
@tanstack/start-server-corenpm |
1.167.36 up to 1.167.37 | 1.167.37 |
@tanstack/start-static-server-functionsnpm |
1.166.47 up to 1.166.48 | 1.166.48 |
@tanstack/start-storage-contextnpm |
1.166.41 up to 1.166.42 | 1.166.42 |
@tanstack/valibot-adapternpm |
1.166.15 up to 1.166.16 | 1.166.16 |
@tanstack/virtual-file-routesnpm |
1.161.13 up to 1.161.14 | 1.161.14 |
@tanstack/vue-routernpm |
1.169.8 up to 1.169.9 | 1.169.9 |
@tanstack/vue-router-devtoolsnpm |
1.166.19 up to 1.166.20 | 1.166.20 |
@tanstack/vue-router-ssr-querynpm |
1.166.18 up to 1.166.19 | 1.166.19 |
@tanstack/vue-startnpm |
1.167.64 up to 1.167.65 | 1.167.65 |
@tanstack/vue-start-clientnpm |
1.166.49 up to 1.166.50 | 1.166.50 |
@tanstack/vue-start-servernpm |
1.166.53 up to 1.166.54 | 1.166.54 |
@tanstack/zod-adapternpm |
1.166.15 up to 1.166.16 | 1.166.16 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | Caixa-git/tanstack-shield | 2026-05-12 |
| PoC in GitHub | Yomisana/are-you-get-tanstack-attack | 2026-05-12 |
| PoC in GitHub | qi-scape/scan-shai-hulud | 2026-05-12 |
| PoC in GitHub | ry-allan/tanstack-compromise-checker | 2026-05-12 |
| PoC in GitHub | shayr1/shai-hulud-scan | 2026-05-12 |
| PoC in GitHub | Intrudify/mini-shai-hulud-scanner | 2026-05-13 |
| PoC in GitHub | digi4care/shai-scan | 2026-05-16 |
| PoC in GitHub | fabriziosalmi/tanstack-compromise-checker | 2026-05-16 |
| PoC in GitHub | nkopylov/tanscript-exploit-check | 2026-05-18 |
| PoC in GitHub | prashanthnataraj/mini-shai-hulud-detector | 2026-05-20 |
| PoC in GitHub | renewablehacking/CVE-2026-45321-Tanstack | 2026-05-25 |
| PoC in GitHub | 7whyex/CVE-2026-45321-Tanstack | 2026-06-25 |
History
| Recorded | Changed | Sources |
|---|---|---|
| exploitation, exploits | ||
| first indexed | CVE List, EUVD, GitHub Advisories, CISA KEV, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-45321 is a critical vulnerability (CVSS 9.6) in Tanstack, published May 12, 2026. CISA lists it as known to be exploited, since May 27, 2026. EUVD reports exploitation since May 27, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 3.28%, the 88th percentile. Fixed in @tanstack/arktype-adapter 1.166.16.
References
github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx
github.com/TanStack/router/issues/7383
tanstack.com/blog/npm-supply-chain-compromise-postmortem
stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem
cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-45321
socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack
Left out here: the rest of 2 source descriptions. The JSON record has them.