---
id: "CVE-2026-45321"
kind: "vulnerability"
aliases: ["CVE-2026-45321"]
title: "On 2026-05-11, between approximately 19:20 and 19:26 UTC, 84 malicious versions across 42 @tanstack/* packages were\u2026"
severity: "critical"
cvss: 9.6
epss: null
exploited: true
status: "open"
category: "package"
products: [{"name": "TanStack TanStack", "fixed": [], "affected": "", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/arktype-adapter", "fixed": [], "affected": "= 1.166.12", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/arktype-adapter", "fixed": [], "affected": "= 1.166.15", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/eslint-plugin-router", "fixed": [], "affected": "= 1.161.9", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/eslint-plugin-router", "fixed": [], "affected": "= 1.161.12", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/eslint-plugin-start", "fixed": [], "affected": "= 0.0.4", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/eslint-plugin-start", "fixed": [], "affected": "= 0.0.7", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/history", "fixed": [], "affected": "= 1.161.9", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/history", "fixed": [], "affected": "= 1.161.12", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/nitro-v2-vite-plugin", "fixed": [], "affected": "= 1.154.12", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/nitro-v2-vite-plugin", "fixed": [], "affected": "= 1.154.15", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-router", "fixed": [], "affected": "= 1.169.5", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-router", "fixed": [], "affected": "= 1.169.8", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-router-devtools", "fixed": [], "affected": "= 1.166.16", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-router-devtools", "fixed": [], "affected": "= 1.166.19", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-router-ssr-query", "fixed": [], "affected": "= 1.166.15", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-router-ssr-query", "fixed": [], "affected": "= 1.166.18", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start", "fixed": [], "affected": "= 1.167.68", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start", "fixed": [], "affected": "= 1.167.71", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start-client", "fixed": [], "affected": "= 1.166.51", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start-client", "fixed": [], "affected": "= 1.166.54", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start-rsc", "fixed": [], "affected": "= 0.0.47", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start-rsc", "fixed": [], "affected": "= 0.0.50", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start-server", "fixed": [], "affected": "= 1.166.55", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/react-start-server", "fixed": [], "affected": "= 1.166.58", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-cli", "fixed": [], "affected": "= 1.166.46", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-cli", "fixed": [], "affected": "= 1.166.49", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-core", "fixed": [], "affected": "= 1.169.5", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-core", "fixed": [], "affected": "= 1.169.8", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-devtools", "fixed": [], "affected": "= 1.166.16", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-devtools", "fixed": [], "affected": "= 1.166.19", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-devtools-core", "fixed": [], "affected": "= 1.167.6", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-devtools-core", "fixed": [], "affected": "= 1.167.9", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-generator", "fixed": [], "affected": "= 1.166.45", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-generator", "fixed": [], "affected": "= 1.166.48", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-plugin", "fixed": [], "affected": "= 1.167.38", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-plugin", "fixed": [], "affected": "= 1.167.41", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-ssr-query-core", "fixed": [], "affected": "= 1.168.3", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-ssr-query-core", "fixed": [], "affected": "= 1.168.6", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-utils", "fixed": [], "affected": "= 1.161.11", "ecosystem": "vendor"}, {"name": "tanstack tanstack\\/router-utils", "fixed": [], "affected": "= 1.161.14", "ecosystem": "vendor"}]
ecosystems: ["vendor"]
tags: ["ci-cd", "exploited", "javascript", "npm", "package", "ransomware", "tanstack"]
not_affected_if: ["no-tanstack-dependency", "pinned-clean-versions"]
published_at: "2026-05-12T01:16:46+00:00"
first_seen_at: "2026-10-23T19:11:51+00:00"
updated_at: "2026-10-23T23:44:51+00:00"
sources: [{"source": "kev", "url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?search_api_fulltext=CVE-2026-45321", "first_seen_at": "2026-10-23T19:11:51+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-45321", "first_seen_at": "2026-10-23T23:44:51+00:00"}]
---

# On 2026-05-11, between approximately 19:20 and 19:26 UTC, 84 malicious versions across 42 @tanstack/* packages were…

TanStack packages were compromised so that malicious versions were published to the npm registry under a trusted identity. Installing those versions lets an attacker steal credentials from the machine or CI system that runs them.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- vendor:TanStack TanStack affected ? fixed ?
- vendor:tanstack tanstack\/arktype-adapter affected = 1.166.12 fixed ?
- vendor:tanstack tanstack\/arktype-adapter affected = 1.166.15 fixed ?
- vendor:tanstack tanstack\/eslint-plugin-router affected = 1.161.9 fixed ?
- vendor:tanstack tanstack\/eslint-plugin-router affected = 1.161.12 fixed ?
- vendor:tanstack tanstack\/eslint-plugin-start affected = 0.0.4 fixed ?
- vendor:tanstack tanstack\/eslint-plugin-start affected = 0.0.7 fixed ?
- vendor:tanstack tanstack\/history affected = 1.161.9 fixed ?
- vendor:tanstack tanstack\/history affected = 1.161.12 fixed ?
- vendor:tanstack tanstack\/nitro-v2-vite-plugin affected = 1.154.12 fixed ?
- vendor:tanstack tanstack\/nitro-v2-vite-plugin affected = 1.154.15 fixed ?
- vendor:tanstack tanstack\/react-router affected = 1.169.5 fixed ?
- vendor:tanstack tanstack\/react-router affected = 1.169.8 fixed ?
- vendor:tanstack tanstack\/react-router-devtools affected = 1.166.16 fixed ?
- vendor:tanstack tanstack\/react-router-devtools affected = 1.166.19 fixed ?
- vendor:tanstack tanstack\/react-router-ssr-query affected = 1.166.15 fixed ?
- vendor:tanstack tanstack\/react-router-ssr-query affected = 1.166.18 fixed ?
- vendor:tanstack tanstack\/react-start affected = 1.167.68 fixed ?
- vendor:tanstack tanstack\/react-start affected = 1.167.71 fixed ?
- vendor:tanstack tanstack\/react-start-client affected = 1.166.51 fixed ?
- vendor:tanstack tanstack\/react-start-client affected = 1.166.54 fixed ?
- vendor:tanstack tanstack\/react-start-rsc affected = 0.0.47 fixed ?
- vendor:tanstack tanstack\/react-start-rsc affected = 0.0.50 fixed ?
- vendor:tanstack tanstack\/react-start-server affected = 1.166.55 fixed ?
- vendor:tanstack tanstack\/react-start-server affected = 1.166.58 fixed ?
- vendor:tanstack tanstack\/router-cli affected = 1.166.46 fixed ?
- vendor:tanstack tanstack\/router-cli affected = 1.166.49 fixed ?
- vendor:tanstack tanstack\/router-core affected = 1.169.5 fixed ?
- vendor:tanstack tanstack\/router-core affected = 1.169.8 fixed ?
- vendor:tanstack tanstack\/router-devtools affected = 1.166.16 fixed ?
- vendor:tanstack tanstack\/router-devtools affected = 1.166.19 fixed ?
- vendor:tanstack tanstack\/router-devtools-core affected = 1.167.6 fixed ?
- vendor:tanstack tanstack\/router-devtools-core affected = 1.167.9 fixed ?
- vendor:tanstack tanstack\/router-generator affected = 1.166.45 fixed ?
- vendor:tanstack tanstack\/router-generator affected = 1.166.48 fixed ?
- vendor:tanstack tanstack\/router-plugin affected = 1.167.38 fixed ?
- vendor:tanstack tanstack\/router-plugin affected = 1.167.41 fixed ?
- vendor:tanstack tanstack\/router-ssr-query-core affected = 1.168.3 fixed ?
- vendor:tanstack tanstack\/router-ssr-query-core affected = 1.168.6 fixed ?
- vendor:tanstack tanstack\/router-utils affected = 1.161.11 fixed ?
- vendor:tanstack tanstack\/router-utils affected = 1.161.14 fixed ?

## How to check

Run npm ls to list installed TanStack packages and compare versions against the advisory list of malicious releases (source not specified in the sources).
Check lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock) for TanStack packages installed since the compromise date.

## Fix

Remove or pin away from the affected TanStack versions and reinstall from a known-good version, then rotate any credentials available to builds or machines that installed them.
CISA directs following vendor mitigation instructions, or discontinuing use if mitigations are unavailable.

## Timeline

- 2026-10-23T19:11:51+00:00 kev https://www.cisa.gov/known-exploited-vulnerabilities-catalog?search_api_fulltext=CVE-2026-45321
- 2026-10-23T23:44:51+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-45321

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
