// threat brief
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
- Topics
- Supply chain · AI security
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 affected | Developer 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 happens | The 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 now | Upgrade 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)
|
| Affected versions | 42 @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)
|
| Fixed versions | Versions published after the incident (for example @tanstack/react-router 1.169.9 or later); TanStack says all currently published versions are safeView evidence(2)
|
| CVSS vector | Show full vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H |
| Timeline | |
| CISA KEV | Listed (2026-05-27): attacks have been seen in the wildView evidence(4)
|
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.
- 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 checkgrep -nE '"?@tanstack/[a-z0-9-]+' package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null - 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 checkgrep -rn --include=package.json -e '@tanstack/setup' -e 'router_init.js' . 2>/dev/null - 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.
- 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.
- 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 checknpm ls --all 2>/dev/null | grep '@tanstack/' - 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 environmentnpm config set ignore-scripts true
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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
- Upgrade. Move affected packages to versions published after the incident (see the first safe version column above) and regenerate your lockfile.
- Temporarily disable install scripts. The advisory’s stopgap:
npm config set ignore-scripts true. This may break legitimate packages that need install scripts. - Check whether you were hit. Official advice: search lockfiles for the versions above; check
package.jsonfor an unexpected@tanstack/setupoptionalDependencies entry; look for an undeclaredrouter_init.js. To inspect package contents, usenpm packwithout running lifecycle scripts. The advisory lists the exfiltration domainsfilev2.getsession.organdseed1–seed3.getsession.org, which you can search for in network logs. - If you were hit: clean up persistence before revoking tokens. Security firms (not TanStack) advise removing the
gh-token-monitorservice (macOS:~/Library/LaunchAgents/com.user.gh-token-monitor.plist; Linux:~/.config/systemd/user/gh-token-monitor.service) and the hooks in.claude/settings.jsonand.vscode/tasks.json, or isolating the machine, before revoking tokens. Otherwise the wipe may trigger. TanStack’s advisory does not mention this ordering. - 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). - Long-term hardening (adopted by TanStack): removed
pull_request_targetand 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
| Condition | Affected? |
|---|---|
| Installed one of the malicious versions below on a developer machine or CI runner on 2026-05-11 | Affected; follow “How to fix” |
| A lockfile pins one of the malicious versions below | Possibly; npm has removed those versions, but check whether they were ever installed |
| Using only TanStack Query, Table, Form, Virtual, Store or other libraries | Not affected (only Router and Start packages from the TanStack/router repository were hit) |
| Currently on versions published after the incident | Safe; 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):
| Package | Malicious versions | First safe version |
|---|---|---|
| react-router, vue-router, solid-router, router-core | 1.169.5, 1.169.8 | 1.169.9 |
| history, eslint-plugin-router | 1.161.9, 1.161.12 | 1.161.13 |
| router-cli | 1.166.46, 1.166.49 | 1.166.50 |
| router-generator | 1.166.45, 1.166.48 | 1.166.49 |
| router-plugin | 1.167.38, 1.167.41 | 1.167.42 |
| router-utils | 1.161.11, 1.161.14 | 1.161.15 |
| router-vite-plugin | 1.166.53, 1.166.56 | 1.166.57 |
| router-devtools, react-router-devtools, vue-router-devtools, solid-router-devtools | 1.166.16, 1.166.19 | 1.166.20 |
| router-devtools-core | 1.167.6, 1.167.9 | 1.167.10 |
| router-ssr-query-core | 1.168.3, 1.168.6 | 1.168.7 |
| react-router-ssr-query, vue-router-ssr-query, solid-router-ssr-query | 1.166.15, 1.166.18 | 1.166.19 |
| virtual-file-routes | 1.161.10, 1.161.13 | 1.161.14 |
| react-start | 1.167.68, 1.167.71 | 1.167.72 |
| react-start-client | 1.166.51, 1.166.54 | 1.166.55 |
| react-start-server | 1.166.55, 1.166.58 | 1.166.59 |
| react-start-rsc | 0.0.47, 0.0.50 | 0.0.51 |
| solid-start | 1.167.65, 1.167.68 | 1.167.69 |
| solid-start-client | 1.166.50, 1.166.53 | 1.166.54 |
| solid-start-server | 1.166.54, 1.166.57 | 1.166.58 |
| vue-start | 1.167.61, 1.167.64 | 1.167.65 |
| vue-start-client | 1.166.46, 1.166.49 | 1.166.50 |
| vue-start-server | 1.166.50, 1.166.53 | 1.166.54 |
| start-client-core | 1.168.5, 1.168.8 | 1.168.9 |
| start-server-core | 1.167.33, 1.167.36 | 1.167.37 |
| start-plugin-core | 1.169.23, 1.169.26 | 1.169.27 |
| start-fn-stubs | 1.161.9, 1.161.12 | 1.161.13 |
| start-static-server-functions | 1.166.44, 1.166.47 | 1.166.48 |
| start-storage-context | 1.166.38, 1.166.41 | 1.166.42 |
| eslint-plugin-start | 0.0.4, 0.0.7 | 0.0.8 |
| nitro-v2-vite-plugin | 1.154.12, 1.154.15 | 1.154.16 |
| zod-adapter, valibot-adapter, arktype-adapter | 1.166.12, 1.166.15 | 1.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:
- “Pwn Request.” A workflow triggered by
pull_request_targetran 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. - 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.
- 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 rightsThe 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 npmWhat 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.jsonand a folder-open task in VS Code’s.vscode/tasks.json, so the payload runs again whenever the tool opens, plus agh-token-monitorbackground 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-monitorbackground 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:16 | Attacker creates the fork zblgg/configuration |
| 2026-05-10 23:29 | Malicious commit added to the fork |
| 2026-05-11 ~10:49 | PR #7378 opened |
| 2026-05-11 11:29 | Poisoned cache (~1.1 GB) saved |
| 2026-05-11 19:15/19:20–19:26 | Malicious 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:46 | A StepSecurity researcher reports it in issue #7383 |
| 2026-05-11 20:19 / 21:03 | First versions deprecated / all 84 deprecated |
| 2026-05-11 20:50 | CVE reserved |
| 2026-05-11 22:13–23:55 | npm removes the tarballs |
| 2026-05-11 | GitHub security advisory published |
| 2026-05-12 00:12 | CVE published (NVD shows 01:16) |
| 2026-05-12 (updated 05-15) | TanStack publishes its hardening follow-up |
| 2026-05-27 | Added to CISA KEV; federal deadline 2026-06-10 |
| 2026-06-08 / 06-17 / 08-04 | Last 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_targetrisks and cache poisoning.
Verification Reviewed and checked against sources; not yet reproduced in our lab
| Reviewed | 2026-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
- 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
- AdvisoryGHSA-g7cv-rxg3-hmpx (GitHub Advisory Database) · GitHub, 2026-05-11 · accessed 2026-09-23
- AdvisoryCVE-2026-45321 CVE record · CVE Program / GitHub CNA, 2026-05-12 · accessed 2026-09-23
- CVE / NVD / OSVCVE-2026-45321 NVD API record · NIST NVD, 2026-05-12 · accessed 2026-09-23
- AdvisoryCISA Adds Three Known Exploited Vulnerabilities to Catalog · CISA, 2026-05-27 · accessed 2026-09-23
- AdvisoryWidespread Supply Chain Compromise Impacting npm Ecosystem · CISA, 2025-09-23 · accessed 2026-09-23Background on the first Shai-Hulud wave (September 2025).
- VendorPostmortem: TanStack npm supply-chain compromise · TanStack, 2026-05-11 · accessed 2026-09-23
- VendorHardening TanStack After the npm Compromise · TanStack, 2026-05-12 · accessed 2026-09-23
- OtherSeveral npm latest releases were compromised · Issue #7383 · TanStack (GitHub), 2026-05-11 · accessed 2026-09-23
- 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
- ResearchMini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised · Wiz, 2026-05-11 · accessed 2026-09-23
- ResearchTanStack npm Packages Hit by Mini Shai-Hulud · Snyk, 2026-05-11 · accessed 2026-09-23
- ResearchMini Shai-Hulud: TeamPCP Worm Targets AI Developer Toolchain · Cloud Security Alliance, 2026-05-18 · accessed 2026-09-23
- ResearchSupply Chain Campaign Targets SAP npm Packages with Credential-Stealing Malware · Wiz, 2026-04-29 · accessed 2026-09-23
- 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.
TanStack npm supply-chain compromise (Mini Shai-Hulud): hijacked release pipeline pushed credential-stealing malware into 42 @tanstack packages 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)(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-45321) - Scale:42 packages, 84 malicious versions(https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx) - Malicious publishing:2026-05-11, about 19:20–19:26 UTC(https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx) - Added to CISA KEV:2026-05-27 (federal deadline 2026-06-10)(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-45321) - Weakness:CWE-506 (Embedded Malicious Code)(https://github.com/advisories/GHSA-g7cv-rxg3-hmpx) 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. 「These packages had valid signatures and really did come from TanStack's pipeline; the problem was that the pipeline itself had been tampered with.」— PlainCVE https://plaincve.date/en/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise
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}
}