// threat brief

CVE-2026-45321Actively exploited

TanStack npm supply-chain compromise (Mini Shai-Hulud): hijacked release pipeline pushed credential-stealing malware into 42 @tanstack packages

CVSS
9.6 CRITICAL
CISA KEV
2026-05-27
Weakness
CWE-506

PlainCVE Team · Published 2026-09-23 · Updated 2026-09-24 · AI-assisted · Press brief ↓

Human review 2026-09-23Command tests: none yetReproduced: not yetVerification record ↓

Attackers hijacked TanStack's GitHub release pipeline and pushed credential-stealing malware in 84 versions of 42 @tanstack/* npm packages.

Who is affectedDeveloper machines and CI runners that installed an affected TanStack Router / Start npm package version on 2026-05-11, or projects whose lockfile pins one. Query, Table, Form and TanStack's other libraries were not affected.
What happensThe malware ran automatically during install, stole AWS, GCP, Kubernetes, Vault, GitHub, npm and SSH credentials, and tried to use stolen access to infect other packages the victim maintains. Researchers also report persistence through AI and developer tool settings, and a home-directory wipe if the stolen token is revoked.
What to do nowUpgrade affected packages to versions published after the incident and check your lockfiles. If you installed an affected version on May 11, remove the persistence or isolate the machine first, then rotate every credential that machine could reach.
View evidence(4)
  • Vendor / maintainerTanStack's advice: anyone who installed an affected version on May 11 should rotate every credential reachable from the install hostwe strongly recommend that anyone who installed an affected version on 2026-05-11 rotate AWS, GCP, Kubernetes, Vault, GitHub, npm, and SSH credentials reachable from the install host.tanstack.com
  • Vendor / maintainerTanStack's advisory: set ignore-scripts as a temporary defense to skip install scriptsConfigure npm to skip lifecycle scripts on install (npm config set ignore-scripts true) as a temporary defense-in-depth measure.github.com
  • ResearchersSecurity firms (not TanStack) advise removing the gh-token-monitor backdoor before revoking tokensSearch for the gh-token-monitor daemon on developer machines and remove it. Do this before revoking GitHub tokens, to avoid the wiper.wiz.io
  • ResearchersCSA advises restricting npm Trusted Publishing to release workflows on protected branchesrestrict them to require that publish credentials be issued only from designated, protected-branch release workflows.labs.cloudsecurityalliance.org
Affected versions42 @tanstack/* packages, each with two malicious versions (for example @tanstack/react-router 1.169.5 and 1.169.8); the GitHub Advisory Database lists the same 84 versions individually. Full list in the body.
View evidence(3)
  • CVE recordCVE record: 84 malicious versions across 42 @tanstack/* packages were published to npm84 malicious versions across 42 @tanstack/* packages were published to the npm registry.cveawg.mitre.org
  • Vendor / maintainerTanStack's advisory: each affected package received exactly two malicious versionsEach affected package received exactly two malicious versions, published a few minutes apart.github.com
  • Vendor / maintainerTanStack postmortem: only the Router/Start repo was affected; Query, Table, Form and the other libraries were notOnly the Router/Start repo was affected — 42 monorepo packages, 2 versions each.tanstack.com
Fixed versionsVersions published after the incident (for example @tanstack/react-router 1.169.9 or later); TanStack says all currently published versions are safe
View evidence(2)
  • Vendor / maintainerTanStack postmortem: every currently published version is safe to installEvery currently-available published version of every TanStack package — Router and Start included — is safe to install.tanstack.com
  • Vulnerability databaseThe GitHub Advisory Database lists the first safe version for each package, for example @tanstack/react-router 1.169.9github.com
CVSS vector
Show full vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
Timeline
  • Introduced 2026-05-11 · First malicious @tanstack versions published to npm source
  • First public 2026-05-11
  • First attacks 2026-05-11 · Release pipeline hijacked, malicious versions published; no victims confirmed source
CISA KEVListed (2026-05-27): attacks have been seen in the wild
View evidence(4)
  • CERT / governmentCISA added this CVE to KEV on 2026-05-27, based on evidence of active exploitationKnown Exploited Vulnerabilities (KEV) Catalog, based on evidence of active exploitation.cisa.gov
  • CERT / governmentCISA's enrichment in the CVE record: added to KEV on 2026-05-27"dateAdded":"2026-05-27"cveawg.mitre.org
  • Vulnerability databaseKEV data in NVD: added 2026-05-27, federal agency deadline 2026-06-10"cisaExploitAdd":"2026-05-27","cisaActionDue":"2026-06-10"services.nvd.nist.gov
  • Vendor / maintainerTanStack postmortem: the malicious versions were detected publicly within 20 to 26 minutesThe malicious versions were detected publicly within 20 to 26 minutestanstack.com

Blue team playbook

Check, fix / mitigate, respond, harden. Matching the affected versions does not mean you were compromised, and a check that finds nothing does not prove you are safe; each item says what it can and cannot show. Tagged steps point to where the attack flow below can be stopped.

DETECTCheckAm I affected? Any signs of compromise?
  1. 01Search lockfiles for affected versions

    Compare the @tanstack/* versions in package-lock.json, pnpm-lock.yaml or yarn.lock against the version table in the body. TanStack's advisory and the GitHub Advisory Database both list the two malicious versions of each package.

    Read-only check
    grep -nE '"?@tanstack/[a-z0-9-]+' package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null
  2. 02Look for the injection markers named in the advisory

    Official advice: check package.json for an unexpected @tanstack/setup optionalDependencies entry and for an undeclared router_init.js. To inspect package contents, use npm pack without running lifecycle scripts.

    Read-only check
    grep -rn --include=package.json -e '@tanstack/setup' -e 'router_init.js' . 2>/dev/null
  3. 03Check AI and developer tool settings for persistence (third-party reports)

    StepSecurity, Wiz and CSA report: check .claude/settings.json for SessionStart hooks, .vscode/tasks.json for folder-open tasks, and ~/Library/LaunchAgents/com.user.gh-token-monitor.plist (macOS) or ~/.config/systemd/user/gh-token-monitor.service (Linux); also look for suspicious commits authored as claude@users.noreply.github.com.

  4. 04Review cloud audit logs

    Official advice: audit CI runners that ran installs during the window and check cloud audit logs for suspicious activity after the install.

MITIGATEFix / mitigatePatch; block it if you cannot patch yet
  1. 01Upgrade to versions published after the incident

    For example @tanstack/react-router 1.169.9 or later; see the body table for each package's first safe version. npm removed the malicious versions the same day.

    Read-only check
    npm ls --all 2>/dev/null | grep '@tanstack/'
  2. 02Temporarily disable install scripts

    The advisory's temporary defence: stops packages from running code automatically during install. It may break legitimate packages that need install scripts.

    Changes your environment
    npm config set ignore-scripts true
RESPONDRespondIf you find signs of compromise
  1. 01Remove persistence or isolate the machine before revoking tokens

    Security firms (not TanStack) advise removing the gh-token-monitor service and the .claude / .vscode hooks, or isolating the machine, first; otherwise revoking tokens may trigger the home-directory wipe. TanStack's advisory does not mention this ordering.

  2. 02Rotate every credential reachable from the install host

    TanStack's advice: if you installed an affected version on May 11, rotate AWS, GCP, Kubernetes, Vault, GitHub, npm and SSH credentials.

  3. 03Check whether packages you maintain were republished

    The malware republishes packages the victim maintains using stolen access; review your recent publishes and revert suspicious commits authored as claude@users.noreply.github.com (CSA advice).

HARDENHardenPrevent the next one
  1. 01Never run outside PR code with main-repository privileges

    TanStack removed pull_request_target, added repository-owner guards, and is adopting the zizmor Actions linter and CODEOWNERS rules for .github.

  2. 02Keep release workflows cache-free and pin actions to commit SHAs

    TanStack disabled the pnpm cache in release workflows, purged all caches and pinned actions to commit SHAs.

  3. 03Tighten npm Trusted Publishing

    CSA recommends allowing only release workflows on protected branches to publish; TanStack also requires non-SMS two-factor login on npm and GitHub.

  4. 04Use an install cooldown for brand-new releases

    These malicious versions were live for minutes to hours; delaying installs of brand-new releases (for example pnpm 11's feature) avoids incidents like this. Also monitor AI tool config folders for changes (CSA advice).

Full remediation steps and notes
  1. Upgrade. Move affected packages to versions published after the incident (see the first safe version column above) and regenerate your lockfile.
  2. Temporarily disable install scripts. The advisory’s stopgap: npm config set ignore-scripts true. This may break legitimate packages that need install scripts.
  3. Check whether you were hit. Official advice: search lockfiles for the versions above; check package.json for an unexpected @tanstack/setup optionalDependencies entry; look for an undeclared router_init.js. To inspect package contents, use npm pack without running lifecycle scripts. The advisory lists the exfiltration domains filev2.getsession.org and seed1seed3.getsession.org, which you can search for in network logs.
  4. If you were hit: clean up persistence before revoking tokens. Security firms (not TanStack) advise removing the gh-token-monitor service (macOS: ~/Library/LaunchAgents/com.user.gh-token-monitor.plist; Linux: ~/.config/systemd/user/gh-token-monitor.service) and the hooks in .claude/settings.json and .vscode/tasks.json, or isolating the machine, before revoking tokens. Otherwise the wipe may trigger. TanStack’s advisory does not mention this ordering.
  5. Rotate credentials. TanStack’s advice: if you installed an affected version on May 11, rotate every AWS, GCP, Kubernetes, Vault, GitHub, npm and SSH credential reachable from that machine; audit CI runners that ran installs during the window; and check cloud audit logs. Also revert suspicious commits authored as claude@users.noreply.github.com (CSA advice).
  6. Long-term hardening (adopted by TanStack): removed pull_request_target and added repository-owner guards; disabled the pnpm cache in release workflows and purged all caches; pinned actions to commit SHAs; required non-SMS two-factor login on npm and GitHub; moved to pnpm 11’s install cooldown for brand-new releases; adopting the zizmor Actions linter and CODEOWNERS rules for .github (in progress). CSA also recommends limiting npm Trusted Publishing to release workflows on protected branches and monitoring AI tool config folders for changes.

Attack flow

Read left to right: this is the order the attack happens in. A blue shield means the step can be stopped; the earlier, the better. Click an icon for details.

TanStack npm supply-chain compromise (Mini Shai-Hulud): hijacked release pipeline pushed credential-stealing malware into 42 @tanstack packages: 1. Opens a pull request from a renamed fork → 2. Poisons the GitHub Actions cache → 3. Pulls the OIDC token from memory and publishes to npm → 4. The victim installs the package and the malware runs automatically → 5. Steals credentials and spreads itself → 6. Leaves persistence and may wipe data when a token is revokedCVE-2026-45321 · TanStack npm supply-chain compromise (Mini Shai-Hulud): hijacked release pipeline pushed credential-stealingmalware into 42 @tanstack packagesAttackerYour systemExternalOpens a pull request from a renamed fork — The attacker renamed the fork so it wouldn't show in the fork list. A TanStack workflow triggered by pull_request_target ran the outside fork's code with the main repository's privileges, with no approval step for first-time contributors. 1Opens a pullrequest from arenamed forkPoisons the GitHub Actions cache — That run could write to the Actions cache (the pnpm package store). The main repository's later release workflow reused the poisoned cache. 2Poisons the GitHubActions cachePulls the OIDC token from memory and publishes to npm — During the release run, the poisoned code read the runner's memory, took the short-lived OIDC token allowed to publish to npm, and published 84 malicious versions in about six minutes. Because they came from the real pipeline, they carried valid SLSA provenance and Sigstore signatures. 3Pulls the OIDCtoken from memoryand publishes tonpmThe victim installs the package and the malware runs automatically — Through an optionalDependencies entry and an install lifecycle script, the malicious versions ran router_init.js, about 2.3 MB of obfuscated code, automatically during npm install. 4The victiminstalls thepackage and themalware run…Steals credentials and spreads itself — Steals cloud, Kubernetes, Vault, GitHub, npm and SSH credentials, sends them out over the Session messenger network, then lists other packages the victim maintains and republishes them with the same injection. 5Steals credentialsand spreads itselfLeaves persistence and may wipe data when a token is revoked — Researchers report hooks in Claude Code and VS Code settings that rerun the payload when the tool opens, plus a gh-token-monitor background service; if the stolen token is revoked, it deletes the home directory (sources differ on the exact trigger). 6Leaves persistenceand may wipe datawhen a token isrevokedAttack pathCan be stopped herePlainCVE · plaincve.date/en/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise · CC BY 4.0
Free to use in reporting and teaching under CC BY 4.0. Attribution is already on the image.
  1. Attacker

    Opens a pull request from a renamed fork

    The attacker renamed the fork so it wouldn't show in the fork list. A TanStack workflow triggered by pull_request_target ran the outside fork's code with the main repository's privileges, with no approval step for first-time contributors.

    Defense: Never run outside PR code under pull_request_target; require approval for first-time contributors.

  2. External

    Poisons the GitHub Actions cache

    That run could write to the Actions cache (the pnpm package store). The main repository's later release workflow reused the poisoned cache.

    Defense: Disable caching in release workflows and purge existing Actions caches.

  3. External

    Pulls the OIDC token from memory and publishes to npm

    During the release run, the poisoned code read the runner's memory, took the short-lived OIDC token allowed to publish to npm, and published 84 malicious versions in about six minutes. Because they came from the real pipeline, they carried valid SLSA provenance and Sigstore signatures.

    Defense: Limit npm Trusted Publishing to release workflows on protected branches; remember provenance does not mean the contents are safe.

  4. Your system

    The victim installs the package and the malware runs automatically

    Through an optionalDependencies entry and an install lifecycle script, the malicious versions ran router_init.js, about 2.3 MB of obfuscated code, automatically during npm install.

    Defense: Upgrade to post-incident versions; temporarily set ignore-scripts; use lockfiles and an install cooldown for brand-new releases.

  5. Your system

    Steals credentials and spreads itself

    Steals cloud, Kubernetes, Vault, GitHub, npm and SSH credentials, sends them out over the Session messenger network, then lists other packages the victim maintains and republishes them with the same injection.

    Defense: Rotate every credential reachable from the install host; give CI least privilege.

  6. Your system

    Leaves persistence and may wipe data when a token is revoked

    Researchers report hooks in Claude Code and VS Code settings that rerun the payload when the tool opens, plus a gh-token-monitor background service; if the stolen token is revoked, it deletes the home directory (sources differ on the exact trigger).

    Defense: Remove persistence or isolate the machine before revoking tokens.

Who is affected

This isn’t a bug in TanStack’s code. Attackers took control of TanStack’s release pipeline and put malware into npm packages under TanStack’s name. The people actually put at risk are the ones who installed the malicious versions.

ConditionAffected?
Installed one of the malicious versions below on a developer machine or CI runner on 2026-05-11Affected; follow “How to fix”
A lockfile pins one of the malicious versions belowPossibly; npm has removed those versions, but check whether they were ever installed
Using only TanStack Query, Table, Form, Virtual, Store or other librariesNot affected (only Router and Start packages from the TanStack/router repository were hit)
Currently on versions published after the incidentSafe; TanStack says all currently published versions are safe

About versions: TanStack’s advisory says each package got exactly two malicious versions (for example @tanstack/react-router 1.169.5 and 1.169.8), which fits the 84 versions / 42 packages count. The GitHub Advisory Database lists the same 84 versions individually, so the two agree. The table lists each package’s two malicious versions and first safe version (the @tanstack/ prefix is omitted):

PackageMalicious versionsFirst safe version
react-router, vue-router, solid-router, router-core1.169.5, 1.169.81.169.9
history, eslint-plugin-router1.161.9, 1.161.121.161.13
router-cli1.166.46, 1.166.491.166.50
router-generator1.166.45, 1.166.481.166.49
router-plugin1.167.38, 1.167.411.167.42
router-utils1.161.11, 1.161.141.161.15
router-vite-plugin1.166.53, 1.166.561.166.57
router-devtools, react-router-devtools, vue-router-devtools, solid-router-devtools1.166.16, 1.166.191.166.20
router-devtools-core1.167.6, 1.167.91.167.10
router-ssr-query-core1.168.3, 1.168.61.168.7
react-router-ssr-query, vue-router-ssr-query, solid-router-ssr-query1.166.15, 1.166.181.166.19
virtual-file-routes1.161.10, 1.161.131.161.14
react-start1.167.68, 1.167.711.167.72
react-start-client1.166.51, 1.166.541.166.55
react-start-server1.166.55, 1.166.581.166.59
react-start-rsc0.0.47, 0.0.500.0.51
solid-start1.167.65, 1.167.681.167.69
solid-start-client1.166.50, 1.166.531.166.54
solid-start-server1.166.54, 1.166.571.166.58
vue-start1.167.61, 1.167.641.167.65
vue-start-client1.166.46, 1.166.491.166.50
vue-start-server1.166.50, 1.166.531.166.54
start-client-core1.168.5, 1.168.81.168.9
start-server-core1.167.33, 1.167.361.167.37
start-plugin-core1.169.23, 1.169.261.169.27
start-fn-stubs1.161.9, 1.161.121.161.13
start-static-server-functions1.166.44, 1.166.471.166.48
start-storage-context1.166.38, 1.166.411.166.42
eslint-plugin-start0.0.4, 0.0.70.0.8
nitro-v2-vite-plugin1.154.12, 1.154.151.154.16
zod-adapter, valibot-adapter, arktype-adapter1.166.12, 1.166.151.166.16

Exposure window: TanStack says the malicious versions were detected 20 to 26 minutes after going live. All 84 were deprecated by 21:03 UTC, and npm removed the tarballs between 22:13 and 23:55 UTC. Download counts for the malicious versions are unconfirmed.

How it works

TanStack’s postmortem describes three weaknesses in its GitHub Actions setup that the attacker chained together:

  1. “Pwn Request.” A workflow triggered by pull_request_target ran code from an outside fork’s pull request with the main repository’s privileges, and first-time contributors needed no approval. The attacker also renamed their fork so it wouldn’t show up in the fork list.
  2. Cache poisoning. That run could write to the GitHub Actions cache (the pnpm package store). The main repository’s later release workflow reused the poisoned cache.
  3. OIDC token theft. During the real release run, the poisoned code read the runner’s memory, pulled out a short-lived OIDC token allowed to publish to npm, and published the malicious versions directly, going around the normal publish step. TanStack says no npm tokens were stolen and the publish workflow itself was not modified.

Because the packages really did come out of TanStack’s pipeline, they carried valid SLSA Build Level 3 provenance and Sigstore signatures. As StepSecurity points out, provenance proves which pipeline built something, not that the pipeline behaved as intended.

The flawed approach (conceptual illustration, not TanStack’s actual configuration):

Show code example(yaml)
# Runs with main-repository privileges, but executes code from an outside PR
on: pull_request_target
steps:
  - checkout: the outside PR's code
  - run: install dependencies and run them (can write to the shared cache)
# The release workflow later reads the same cache and holds npm publish rights

The fixed approach:

Show code example(yaml)
# Outside PRs use the pull_request trigger: no secrets, read-only
on: pull_request
permissions: read-all
# Release workflow: protected branches only, no cache, actions pinned to commit SHAs,
# and only this job can obtain the OIDC token used to publish to npm

What the malware did: Through an optionalDependencies entry and an install lifecycle script, the malicious versions ran router_init.js, about 2.3 MB of obfuscated JavaScript, automatically during npm install. TanStack confirms it stole AWS credentials (instance metadata and Secrets Manager), GCP metadata, Kubernetes service-account tokens, Vault tokens, ~/.npmrc, GitHub tokens and SSH keys; sent them out over the Session/Oxen messenger network; and used the victim’s access to republish other packages they maintain.

The following come from research firms (StepSecurity, Wiz, Snyk, CSA) and are not described in TanStack’s postmortem:

  • A SessionStart hook in Claude Code’s .claude/settings.json and a folder-open task in VS Code’s .vscode/tasks.json, so the payload runs again whenever the tool opens, plus a gh-token-monitor background service.
  • A “dead-man’s switch” that deletes the home directory when the stolen token is revoked. TanStack’s follow-up post confirms the switch existed, but sources differ on the trigger: Wiz says a daemon checks GitHub every 60 seconds for revocation; StepSecurity describes npm tokens created with a description warning that revoking them would wipe the owner’s computer.
  • Wiz also reports that the malware stops on Russian-language systems, and that the gh-token-monitor background process exits on its own 24 hours after it starts (only that background process stops; this does not mean the infection or the stolen credentials stop being a problem).
  • Researchers also report GitHub commits authored as claude@users.noreply.github.com, meant to blend in with AI-agent commits.

Timeline

Date (UTC)Event
2026-05-10 17:16Attacker creates the fork zblgg/configuration
2026-05-10 23:29Malicious commit added to the fork
2026-05-11 ~10:49PR #7378 opened
2026-05-11 11:29Poisoned cache (~1.1 GB) saved
2026-05-11 19:15/19:20–19:26Malicious publishing (postmortem gives 19:15–19:26 for the workflow runs; advisory and CVE give 19:20–19:26 for publication)
2026-05-11 19:46A StepSecurity researcher reports it in issue #7383
2026-05-11 20:19 / 21:03First versions deprecated / all 84 deprecated
2026-05-11 20:50CVE reserved
2026-05-11 22:13–23:55npm removes the tarballs
2026-05-11GitHub security advisory published
2026-05-12 00:12CVE published (NVD shows 01:16)
2026-05-12 (updated 05-15)TanStack publishes its hardening follow-up
2026-05-27Added to CISA KEV; federal deadline 2026-06-10
2026-06-08 / 06-17 / 08-04Last updates to the GHSA / NVD / CVE record

Further reading

  • Scoring: the CVSS 3.1 score of 9.6 comes from GitHub (the CNA); NVD lists it as a “Secondary” score, and no separate NVD score was found. “User interaction required” reflects that the victim has to install the package.
  • CWE differences: GitHub, the CVE record and NVD all say CWE-506 (Embedded Malicious Code); the CISA KEV entry has an empty CWE list and calls it an “Unspecified Vulnerability.”
  • Ransomware flag: KEV marks ransomware use as “Known.” Snyk says TeamPCP has a documented partnership with the Vect ransomware group, CSA says the group has cryptocurrency-theft and ransomware roots, and SecurityWeek mentions no ransomware link. The KEV entry does not say why it was flagged, so CISA’s basis is unconfirmed, and this page does not claim ransomware was deployed through this incident.
  • The wider campaign: the name “Mini Shai-Hulud” and the attribution to TeamPCP come from StepSecurity, Wiz, Snyk and CSA; TanStack’s postmortem names no campaign. Researchers report that the same day also hit about 65 UiPath npm packages, Mistral AI (npm and PyPI mistralai@2.4.6), guardrails-ai@0.10.1, the OpenSearch JS client and Squawk packages, with an earlier wave against SAP packages in late April. Counts differ: CSA gives 373 malicious entries across 169 npm and 2 PyPI packages; SecurityWeek at least 401 artifacts across 170+ packages in five hours; Snyk about 170 packages. CVE-2026-45321 covers only the 42 TanStack packages; whether every other victim was infected via TanStack is unconfirmed.
  • The AI developer tooling angle: the persistence hid in Claude Code and VS Code config folders, which are often git-ignored and rarely reviewed, and the fake “claude” commit author was used to blend in with AI-agent commits.
  • Added to KEV in the same batch: CISA’s 2026-05-27 notice added three entries at once: Daemon Tools Lite (CVE-2026-8398), TanStack (this page) and the Nx Console VS Code extension (CVE-2026-48027). All three are cases of malicious code shipped in official releases.
  • Where the Shai-Hulud name comes from: in September 2025 the first npm worm called “Shai-Hulud” stole developers’ credentials and used the stolen npm access to publish malware into the victims’ other packages; CISA issued an alert at the time saying more than 500 packages were compromised. The 2026 “Mini Shai-Hulud” waves (SAP packages in late April, TanStack on this page) reuse the same self-spreading technique. Researchers attribute them to TeamPCP; whether they are the same actors as in 2025 is unconfirmed.
  • Related weakness type: CWE-506; GitHub Actions pull_request_target risks and cache poisoning.

Verification Reviewed and checked against sources; not yet reproduced in our lab

Reviewed2026-09-23

Verification records describe the environment and the result only, never reproduction steps or code that could attack other people’s systems. See our policy.

Sources

  1. AdvisoryMalware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys (GHSA-g7cv-rxg3-hmpx) · TanStack (GitHub), 2026-05-11 · accessed 2026-09-23
  2. AdvisoryGHSA-g7cv-rxg3-hmpx (GitHub Advisory Database) · GitHub, 2026-05-11 · accessed 2026-09-23
  3. AdvisoryCVE-2026-45321 CVE record · CVE Program / GitHub CNA, 2026-05-12 · accessed 2026-09-23
  4. CVE / NVD / OSVCVE-2026-45321 NVD API record · NIST NVD, 2026-05-12 · accessed 2026-09-23
  5. AdvisoryCISA Adds Three Known Exploited Vulnerabilities to Catalog · CISA, 2026-05-27 · accessed 2026-09-23
  6. AdvisoryWidespread Supply Chain Compromise Impacting npm Ecosystem · CISA, 2025-09-23 · accessed 2026-09-23
    Background on the first Shai-Hulud wave (September 2025).
  7. VendorPostmortem: TanStack npm supply-chain compromise · TanStack, 2026-05-11 · accessed 2026-09-23
  8. VendorHardening TanStack After the npm Compromise · TanStack, 2026-05-12 · accessed 2026-09-23
  9. OtherSeveral npm latest releases were compromised · Issue #7383 · TanStack (GitHub), 2026-05-11 · accessed 2026-09-23
  10. ResearchTeamPCP's Mini Shai-Hulud Is Back: A Self-Spreading Supply Chain Attack Compromises TanStack npm Packages · StepSecurity, 2026-05-11 · accessed 2026-09-23
  11. ResearchMini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised · Wiz, 2026-05-11 · accessed 2026-09-23
  12. ResearchTanStack npm Packages Hit by Mini Shai-Hulud · Snyk, 2026-05-11 · accessed 2026-09-23
  13. ResearchMini Shai-Hulud: TeamPCP Worm Targets AI Developer Toolchain · Cloud Security Alliance, 2026-05-18 · accessed 2026-09-23
  14. ResearchSupply Chain Campaign Targets SAP npm Packages with Credential-Stealing Malware · Wiz, 2026-04-29 · accessed 2026-09-23
  15. NewsTanStack, Mistral AI, UiPath Hit in Fresh Supply Chain Attack · SecurityWeek, 2026-05-12 · accessed 2026-09-23

Press brief

In one sentence

TanStack is a widely used set of open-source JavaScript libraries. On May 11, 2026, attackers chained three weaknesses in its GitHub automation to publish 84 credential-stealing versions of 42 npm packages under TanStack's official identity. The versions were pulled within hours, but anyone who installed them that day needs to rotate their credentials. The US agency CISA added the incident to its Known Exploited Vulnerabilities catalog on May 27.

Key facts

Severity
CVSS 3.1 9.6 (scored by GitHub; listed by NVD as secondary) services.nvd.nist.gov
Scale
42 packages, 84 malicious versions github.com
Malicious publishing
2026-05-11, about 19:20–19:26 UTC github.com
Added to CISA KEV
2026-05-27 (federal deadline 2026-06-10) services.nvd.nist.gov
Weakness
CWE-506 (Embedded Malicious Code) github.com

Confirmed

  • Attackers chained three weaknesses in TanStack's GitHub Actions setup to publish credential-stealing packages under its official identity.
  • Only Router and Start packages were affected; TanStack says no npm tokens were stolen.
  • npm removed the malicious versions the same day, and TanStack says all currently published versions are safe.
  • CISA added it to the Known Exploited Vulnerabilities catalog on 2026-05-27.

Unconfirmed / disputed

  • Why CISA marked it as "Known" ransomware use (KEV fields give no reason); there is no evidence ransomware was deployed through this incident.
  • The exact trigger for the wipe-on-revocation behaviour differs between research firms; TanStack only confirms such a switch existed.
  • Download counts for the malicious versions, and whether every other package hit that day was infected via TanStack.

Quotable line

These packages had valid signatures and really did come from TanStack's pipeline; the problem was that the pipeline itself had been tampered with.

Images

Download the share image (PNG) · Attack flow diagram (downloadable)

Please credit "PlainCVE" and link to this page. Full citation format is under "How to cite" below. Found a factual error? Report it.

How to cite this page

This article is CC BY 4.0. Please keep the attribution and link when republishing.

PlainCVE Team (2026). "TanStack npm supply-chain compromise (Mini Shai-Hulud): hijacked release pipeline pushed credential-stealing malware into 42 @tanstack packages". PlainCVE. https://plaincve.date/en/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise (accessed YYYY-MM-DD)
BibTeX
@misc{cve202645321tanstacknpmsupplychaincompromise2026,
  title  = {TanStack npm supply-chain compromise (Mini Shai-Hulud): hijacked release pipeline pushed credential-stealing malware into 42 @tanstack packages},
  author = {PlainCVE Team},
  year   = {2026},
  howpublished = {PlainCVE},
  url    = {https://plaincve.date/en/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise},
  note   = {Updated 2026-09-24}
}