Skip to main content
Meet us at Black Hat USA 2026— Las Vegas, August 1–6Book a Meeting
Mallory
CriticalCISA KEVExploited in the wildPublic exploit

TanStack GitHub Actions Trusted Publisher Supply Chain Compromise

IdentifiersCVE-2026-45321CWE-829

CVE-2026-45321 tracks a supply-chain compromise affecting 42 @tanstack/* npm packages, where 84 malicious versions were published to npm on 2026-05-11 between approximately 19:20 and 19:26 UTC. The available reporting indicates the attacker did not modify the publish workflow itself and did not rely on stolen npm maintainer tokens; instead, they abused TanStack’s legitimate GitHub Actions trusted-publisher/OIDC release path. The attack chain combined three weakness classes: a pull_request_target workflow misconfiguration that allowed fork-controlled code to execute in a privileged base-repository context, GitHub Actions cache poisoning across the fork-to-base trust boundary, and runtime extraction of the GitHub Actions OIDC token from runner process memory. The stolen OIDC token was then exchanged through npm trusted publishing to obtain publish capability under TanStack’s trusted identity, resulting in malicious package releases that reportedly carried valid provenance attestations. The published packages contained credential-stealing malware intended to execute during package installation and harvest developer, CI/CD, cloud, and related secrets.

Share:
For your environment

Are you exposed to this one?

Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.

ANALYST BRIEF

Impact, mitigation & remediation

What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.

Impact

What an attacker gets, and what they’ve been doing with it.

Successful exploitation allowed an attacker to subvert TanStack’s official release pipeline and publish malicious package versions under the project’s legitimate trusted identity on the npm registry. Downstream users installing affected versions could have developer workstation or CI runner credentials stolen, including GitHub tokens, npm tokens, cloud credentials, Kubernetes and Vault secrets, SSH material, and other locally accessible secrets. Because the malicious artifacts were published through the legitimate pipeline and reportedly carried valid provenance attestations, the compromise also undermined trust signals normally used for package verification. The practical impact is ecosystem-scale supply-chain compromise, credential theft, downstream lateral movement, and potential further malicious package publication using harvested credentials.

Mitigation

If you can’t patch tonight, do this now.

As immediate mitigation, pin @tanstack/* dependencies to known-good versions published before 2026-05-11 19:00 UTC, delete node_modules and lockfiles, and reinstall to avoid resolving malicious versions transitively. Temporarily disable lifecycle scripts where operationally feasible as defense in depth. Audit CI pipelines that performed installs involving @tanstack/* during approximately 19:20-19:30 UTC on 2026-05-11 and treat those runners as compromised. Block known exfiltration infrastructure where possible and monitor for suspicious outbound traffic and credential use. On the CI/CD side, avoid pull_request_target for workflows that can touch caches, secrets, or release paths unless untrusted code execution is impossible; isolate caches by trust level; pin actions and workflow inputs; require protected branches for release; and scope OIDC trusted publishing to specific workflow files and branch protections rather than broad repository-level trust.

Remediation

Patch, then assume compromise.

Upgrade or pin all affected @tanstack/* dependencies to known-good fixed versions or versions published before the malicious publication window, and ensure malicious versions are removed from dependency resolution and lockfiles. Reinstall dependencies from a clean lockfile and trusted source. Treat any system or CI runner that installed or built against affected TanStack versions during the exposure window as compromised: rotate all secrets accessible to those hosts, including GitHub, npm, cloud, Kubernetes, Vault, SSH, and other CI/CD credentials; review audit logs for post-compromise activity; and rebuild or reimage impacted runners or developer environments as appropriate. For the root cause, harden GitHub Actions by removing unsafe pull_request_target patterns, preventing untrusted fork code from executing in privileged contexts, segregating or disabling shared caches across trust boundaries, and constraining trusted-publisher/OIDC use to protected branches and tightly scoped workflows.
PUBLIC EXPLOITS

Exploits

2 valid exploits after Mallory filtered fakes, detection scripts, and README-only repos (10 hidden).

VALID 2 / 12 TOTALView more in app
CVE-2026-45321-TanstackMaturityPoCVerified exploit

This repository is a small educational lab that simulates an npm supply-chain attack associated with CVE-2026-45321/TanStack-themed compromise scenarios. It is not a full offensive toolkit; instead, it demonstrates how a malicious package can achieve install-time code execution through the npm `postinstall` lifecycle hook and how similar behavior could affect CI/CD pipelines. Repository structure: `attacker-package/` contains the core exploit logic, including `package.json` and `payload.js`; `fake-repo/` contains a GitHub Actions workflow simulation (`test.yml`) showing how CI could invoke installation of the malicious package; `victim-project/` is a placeholder directory representing the victim environment. The main exploit capability resides in `attacker-package/package.json`, which defines `postinstall: node payload.js`, causing `payload.js` to run automatically when the package is installed. The payload itself is simple but functional: it imports Node's `os` and `fs` modules, prints a marker string indicating execution, collects `USER`, hostname, and platform information, and writes that data to `loot.txt`. There is no network exfiltration, persistence, privilege escalation, or remote command-and-control in the provided code. As such, the exploit is operational as a local proof of install-time execution, but the payload is basic and hardcoded. The CI/CD simulation in `fake-repo/test.yml` uses a `pull_request_target` workflow and demonstrates how an install step could execute attacker-controlled package code on a GitHub Actions runner. This reinforces the repository's purpose as a supply-chain and CI/CD abuse demonstration rather than a stealthy real-world malware sample.

7whyexDisclosed Jun 25, 2026markdownjsonsupply_chainfilecloud
CVE-2026-45321-TanstackMaturityPoCVerified exploit

This repository is a small educational proof-of-concept simulating an npm supply-chain compromise associated with CVE-2026-45321 and a TanStack-themed package name. The repo contains 5 files: a README, a GitHub Actions workflow snippet (`download (2)`), an npm lockfile-like JSON (`download (7)`), a package manifest mislabeled as `payload.js`, and a JavaScript payload mislabeled as `tanstack-react-router-1.169.5.tgz`. Despite the filename/content mismatch, the intended structure is clear from the README. Core exploit behavior: the malicious package impersonates `@tanstack/react-router` version `1.169.5` and defines a `postinstall` script (`node payload.js`). When the victim installs the tarball, npm executes the lifecycle hook automatically. The payload then collects simple host metadata (`USER`, hostname, platform), prints a marker string (`=== MALICIOUS PAYLOAD EXECUTED ===`), and writes the data to `loot.txt`. This demonstrates install-time arbitrary code execution rather than remote exploitation. The repository does not contain a full offensive framework and is not a detection script. It is an operational PoC because it includes a working payload, though the payload is basic and hardcoded. The main attack vectors are supply-chain compromise of a dependency, CI/CD execution through GitHub Actions `pull_request_target` workflows that run `npm install`, and local file-based package installation via a tarball path. No external C2, exfiltration endpoint, or network beaconing is present in the code; all observable actions are local file writes and console output. Notable endpoints and artifacts include the local tarball path `../attacker-package/tanstack-react-router-1.169.5.tgz`, the output file `loot.txt`, the lifecycle command `node payload.js`, and references to GitHub, NVD, npm, and GitHub Actions documentation. Overall, the repository’s purpose is to demonstrate how a malicious npm package can abuse lifecycle hooks to gain code execution during dependency installation, especially in developer or CI environments that implicitly trust package installs.

adriannurrrDisclosed Jun 21, 2026markdownyamlsupply_chaincloudfile
EXPOSURE SURFACE

Affected products & vendors

Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.

VendorProductType
Abhishake1Supersurkhet/Cliapplication
Abhishake1Supersurkhet/Sdkapplication
Abhishake1Taskflow-Corp/Cliapplication
AgentworkhqAgentwork-Cliapplication
AntoinebcxMl-Toolkit-Tsapplication
AntoinebcxMl-Toolkit-Ts/Preprocessingapplication
AntoinebcxMl-Toolkit-Ts/Xgboostapplication
BeProductBeproduct/Nestjs-Authapplication
ChristianalaresGit Branch Selectorapplication
ChristianalaresGit-Git-Gitapplication
ChristianalaresNextmove-Mcpapplication
ChristianalaresTolka/Cliapplication
DirigibleDirigible-Ai/Sdkapplication
GuardrailsaiGuardrails Aiapplication
KilbotTallyui/Componentsapplication
KilbotTallyui/Connector-Medusaapplication
KilbotTallyui/Connector-Shopifyapplication
KilbotTallyui/Connector-Vendureapplication
KilbotTallyui/Connector-Woocommerceapplication
KilbotTallyui/Coreapplication
KilbotTallyui/Databaseapplication
KilbotTallyui/Posapplication
KilbotTallyui/Storage-Sqliteapplication
KilbotTallyui/Themeapplication
Linux FoundationOpensearchapplication
MatheuspergoliDraftauth/Clientapplication
MatheuspergoliDraftauth/Coreapplication
MatheuspergoliDraftlab/Authapplication
MatheuspergoliDraftlab/Auth-Routerapplication
MatheuspergoliDraftlab/Dbapplication
MatheuspergoliSimple Type-Safe Actionsapplication
MesaMesadev/Restapplication
MesaMesadev/Saguaroapplication
MesaMesadev/Sdkapplication
Mistral AIMistralaiapplication
Mistral AIMistralai/Mistralaiapplication
Mistral AIMistralai/Mistralai-Azureapplication
Mistral AIMistralai/Mistralai-Gcpapplication
MultiagentcognitionCmux-Agent-Mcpapplication
NeilcochranCross-Stitchapplication
NeilcochranSquawk/Airportsapplication
NeilcochranSquawk/Airspaceapplication
NeilcochranSquawk/Airspace-Dataapplication
NeilcochranSquawk/Airway-Dataapplication
NeilcochranSquawk/Airwaysapplication
NeilcochranSquawk/Fix-Dataapplication
NeilcochranSquawk/Fixesapplication
NeilcochranSquawk/Flight-Mathapplication
NeilcochranSquawk/Flightplanapplication
NeilcochranSquawk/Geoapplication
NeilcochranSquawk/Icao-Registryapplication
NeilcochranSquawk/Icao-Registry-Dataapplication
NeilcochranSquawk/Mcpapplication
NeilcochranSquawk/Navaid-Dataapplication
NeilcochranSquawk/Navaidsapplication
NeilcochranSquawk/Notamsapplication
NeilcochranSquawk/Procedure-Dataapplication
NeilcochranSquawk/Proceduresapplication
NeilcochranSquawk/Typesapplication
NeilcochranSquawk/Unitsapplication
NeilcochranSquawk/Weatherapplication
NeilcochranTs-Dnaapplication
NeilcochranWot-Apiapplication
TanstackArktype-Adapterapplication
TanstackEslint-Plugin-Routerapplication
TanstackEslint-Plugin-Startapplication
TanstackHistoryapplication
TanstackNitro-V2-Vite-Pluginapplication
TanstackReact-Routerapplication
TanstackReact-Router-Devtoolsapplication
TanstackReact-Router-Ssr-Queryapplication
TanstackReact-Startapplication
TanstackReact-Start-Clientapplication
TanstackReact-Start-Rscapplication
TanstackReact-Start-Serverapplication
TanstackRouter-Cliapplication
TanstackRouter-Coreapplication
TanstackRouter-Devtoolsapplication
TanstackRouter-Devtools-Coreapplication
TanstackRouter-Generatorapplication
TanstackRouter-Pluginapplication
TanstackRouter-Ssr-Query-Coreapplication
TanstackRouter-Utilsapplication
TanstackRouter-Vite-Pluginapplication
TanstackSolid-Routerapplication
TanstackSolid-Router-Devtoolsapplication
TanstackSolid-Router-Ssr-Queryapplication
TanstackSolid-Startapplication
TanstackSolid-Start-Clientapplication
TanstackSolid-Start-Serverapplication
TanstackStart-Client-Coreapplication
TanstackStart-Fn-Stubsapplication
TanstackStart-Plugin-Coreapplication
TanstackStart-Server-Coreapplication
TanstackStart-Static-Server-Functionsapplication
TanstackStart-Storage-Contextapplication
TanstackTanstack/Arktype-Adapterapplication
TanstackTanstack/Eslint-Plugin-Routerapplication
TanstackTanstack/Eslint-Plugin-Startapplication
TanstackTanstack/Historyapplication
TanstackTanstack/Nitro-V2-Vite-Pluginapplication
TanstackTanstack/React-Routerapplication
TanstackTanstack/React-Router-Devtoolsapplication
TanstackTanstack/React-Router-Ssr-Queryapplication
TanstackTanstack/React-Startapplication
TanstackTanstack/React-Start-Clientapplication
TanstackTanstack/React-Start-Rscapplication
TanstackTanstack/React-Start-Serverapplication
TanstackTanstack/Router-Cliapplication
TanstackTanstack/Router-Coreapplication
TanstackTanstack/Router-Devtoolsapplication
TanstackTanstack/Router-Devtools-Coreapplication
TanstackTanstack/Router-Generatorapplication
TanstackTanstack/Router-Pluginapplication
TanstackTanstack/Router-Ssr-Query-Coreapplication
TanstackTanstack/Router-Utilsapplication
TanstackTanstack/Router-Vite-Pluginapplication
TanstackTanstack/Solid-Routerapplication
TanstackTanstack/Solid-Router-Devtoolsapplication
TanstackTanstack/Solid-Router-Ssr-Queryapplication
TanstackTanstack/Solid-Startapplication
TanstackTanstack/Solid-Start-Clientapplication
TanstackTanstack/Solid-Start-Serverapplication
TanstackTanstack/Start-Client-Coreapplication
TanstackTanstack/Start-Fn-Stubsapplication
TanstackTanstack/Start-Plugin-Coreapplication
TanstackTanstack/Start-Server-Coreapplication
TanstackTanstack/Start-Static-Server-Functionsapplication
TanstackTanstack/Start-Storage-Contextapplication
TanstackTanstack/Valibot-Adapterapplication
TanstackTanstack/Virtual-File-Routesapplication
TanstackTanstack/Vue-Routerapplication
TanstackTanstack/Vue-Router-Devtoolsapplication
TanstackTanstack/Vue-Router-Ssr-Queryapplication
TanstackTanstack/Vue-Startapplication
TanstackTanstack/Vue-Start-Clientapplication
TanstackTanstack/Vue-Start-Serverapplication
TanstackTanstack/Zod-Adapterapplication
TanstackValibot-Adapterapplication
TanstackVirtual-File-Routesapplication
TanstackVue-Routerapplication
TanstackVue-Router-Devtoolsapplication
TanstackVue-Router-Ssr-Queryapplication
TanstackVue-Startapplication
TanstackVue-Start-Clientapplication
TanstackVue-Start-Serverapplication
TanstackZod-Adapterapplication
UipathUipath/Access-Policy-Sdkapplication
UipathUipath/Access-Policy-Toolapplication
UipathUipath/Admin-Toolapplication
UipathUipath/Agent-Sdkapplication
UipathUipath/Agent-Toolapplication
UipathUipath/Agent.Sdkapplication
UipathUipath/Aops-Policy-Toolapplication
UipathUipath/Ap-Chatapplication
UipathUipath/Api-Workflow-Toolapplication
UipathUipath/Apollo-Coreapplication
UipathUipath/Apollo-Reactapplication
UipathUipath/Apollo-Windapplication
UipathUipath/Authapplication
UipathUipath/Case-Toolapplication
UipathUipath/Cliapplication
UipathUipath/Codedagent-Toolapplication
UipathUipath/Codedagents-Toolapplication
UipathUipath/Codedapp-Toolapplication
UipathUipath/Commonapplication
UipathUipath/Context-Grounding-Toolapplication
UipathUipath/Data-Fabric-Toolapplication
UipathUipath/Docsai-Toolapplication
UipathUipath/Filesystemapplication
UipathUipath/Flow-Toolapplication
UipathUipath/Functions-Toolapplication
UipathUipath/Gov-Toolapplication
UipathUipath/Identity-Toolapplication
UipathUipath/Insights-Sdkapplication
UipathUipath/Insights-Toolapplication
UipathUipath/Integrationservice-Sdkapplication
UipathUipath/Integrationservice-Toolapplication
UipathUipath/Llmgw-Toolapplication
UipathUipath/Maestro-Sdkapplication
UipathUipath/Maestro-Toolapplication
UipathUipath/Orchestrator-Toolapplication
UipathUipath/Packager-Tool-Apiworkflowapplication
UipathUipath/Packager-Tool-Bpmnapplication
UipathUipath/Packager-Tool-Caseapplication
UipathUipath/Packager-Tool-Connectorapplication
UipathUipath/Packager-Tool-Flowapplication
UipathUipath/Packager-Tool-Functionsapplication
UipathUipath/Packager-Tool-Webappapplication
UipathUipath/Packager-Tool-Workflowcompilerapplication
UipathUipath/Packager-Tool-Workflowcompiler-Browserapplication
UipathUipath/Platform-Toolapplication
UipathUipath/Project-Packagerapplication
UipathUipath/Resource-Toolapplication
UipathUipath/Resourcecatalog-Toolapplication
UipathUipath/Resources-Toolapplication
UipathUipath/Robotapplication
UipathUipath/Rpa-Legacy-Toolapplication
UipathUipath/Rpa-Toolapplication
UipathUipath/Solution-Packagerapplication
UipathUipath/Solution-Toolapplication
UipathUipath/Solutionpackager-Sdkapplication
UipathUipath/Solutionpackager-Tool-Coreapplication
UipathUipath/Tasks-Toolapplication
UipathUipath/Telemetryapplication
UipathUipath/Test-Manager-Toolapplication
UipathUipath/Tool-Workflowcompilerapplication
UipathUipath/Traces-Toolapplication
UipathUipath/Ui-Widgets-Multi-File-Uploadapplication
UipathUipath/Uipath-Python-Bridgeapplication
UipathUipath/Vertical-Solutions-Toolapplication
UipathUipath/Vssapplication
UipathUipath/Widget.Sdkapplication

Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.

ACTIVITY FEED

Recent activity

40 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.

What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets are affected, which adversaries are exploiting it right now, which detections to deploy, and what to do tonight.
Exposure mapping

Query your assets running an affected version, and investigate the blast radius.

Threat actor evidence9

Every observed campaign linking this CVE to a named adversary.

Associated malware15

Malware families riding this exploit, with evidence and IOCs.

Detection signatures1

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

Vendor-by-vendor mapping

Cross-references every affected SKU, including bundled OEM variants.

Social activity24

Community discussion across Reddit, Mastodon, and other social sources.