{"id":"CVE-2026-45321","state":"PUBLISHED","title":"Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys","description":"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.","publishedAt":"2026-05-12T00:12:35.452Z","updatedAt":"2026-08-04T03:56:09.005Z","severity":{"score":9.6,"label":"Critical","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H","source":"GitHub_M"},"assigner":"GitHub_M","products":["@tanstack arktype-adapter","@tanstack eslint-plugin-router","@tanstack eslint-plugin-start","@tanstack history","@tanstack nitro-v2-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 outer-vite-plugin","@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"],"affected":[{"vendor":"@tanstack","product":"arktype-adapter","versions":[{"version":"1.166.12","status":"affected"},{"version":"1.166.15","status":"affected"}]},{"vendor":"@tanstack","product":"eslint-plugin-router","versions":[{"version":"1.161.9","status":"affected"},{"version":"1.161.12","status":"affected"}]},{"vendor":"@tanstack","product":"eslint-plugin-start","versions":[{"version":"0.0.4","status":"affected"},{"version":"0.0.7","status":"affected"}]},{"vendor":"@tanstack","product":"history","versions":[{"version":"1.161.9","status":"affected"},{"version":"1.161.12","status":"affected"}]},{"vendor":"@tanstack","product":"nitro-v2-vite-plugin","versions":[{"version":"1.154.12","status":"affected"},{"version":"1.154.15","status":"affected"}]},{"vendor":"@tanstack","product":"react-router","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"react-router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"react-router-ssr-query","versions":[{"version":"1.166.15","status":"affected"},{"version":"1.166.18","status":"affected"}]},{"vendor":"@tanstack","product":"react-start","versions":[{"version":"1.167.68","status":"affected"},{"version":"1.167.71","status":"affected"}]},{"vendor":"@tanstack","product":"react-start-client","versions":[{"version":"1.166.51","status":"affected"},{"version":"1.166.54","status":"affected"}]},{"vendor":"@tanstack","product":"react-start-rsc","versions":[{"version":"0.0.47","status":"affected"},{"version":"0.0.50","status":"affected"}]},{"vendor":"@tanstack","product":"react-start-server","versions":[{"version":"1.166.55","status":"affected"},{"version":"1.166.58","status":"affected"}]},{"vendor":"@tanstack","product":"router-cli","versions":[{"version":"1.166.46","status":"affected"},{"version":"1.166.49","status":"affected"}]},{"vendor":"@tanstack","product":"router-core","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"router-devtools-core","versions":[{"version":"1.167.6","status":"affected"},{"version":"1.167.9","status":"affected"}]},{"vendor":"@tanstack","product":"router-generator","versions":[{"version":"1.166.45","status":"affected"},{"version":"1.166.48","status":"affected"}]},{"vendor":"@tanstack","product":"router-plugin","versions":[{"version":"1.167.38","status":"affected"},{"version":"1.167.41","status":"affected"}]},{"vendor":"@tanstack","product":"router-ssr-query-core","versions":[{"version":"1.168.3","status":"affected"},{"version":"1.168.6","status":"affected"}]},{"vendor":"@tanstack","product":"router-utils","versions":[{"version":"1.161.11","status":"affected"},{"version":"1.161.14","status":"affected"}]},{"vendor":"@tanstack","product":"outer-vite-plugin","versions":[{"version":"1.166.53","status":"affected"},{"version":"1.166.56","status":"affected"}]},{"vendor":"@tanstack","product":"solid-router","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"solid-router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"solid-router-ssr-query","versions":[{"version":"1.166.15","status":"affected"},{"version":"1.166.18","status":"affected"}]},{"vendor":"@tanstack","product":"solid-start","versions":[{"version":"1.167.65","status":"affected"},{"version":"1.167.68","status":"affected"}]},{"vendor":"@tanstack","product":"solid-start-client","versions":[{"version":"1.166.50","status":"affected"},{"version":"1.166.53","status":"affected"}]},{"vendor":"@tanstack","product":"solid-start-server","versions":[{"version":"1.166.54","status":"affected"},{"version":"1.166.57","status":"affected"}]},{"vendor":"@tanstack","product":"start-client-core","versions":[{"version":"1.168.5","status":"affected"},{"version":"1.168.8","status":"affected"}]},{"vendor":"@tanstack","product":"start-fn-stubs","versions":[{"version":"1.161.9","status":"affected"},{"version":"1.161.12","status":"affected"}]},{"vendor":"@tanstack","product":"start-plugin-core","versions":[{"version":"1.169.23","status":"affected"},{"version":"1.169.26","status":"affected"}]},{"vendor":"@tanstack","product":"start-server-core","versions":[{"version":"1.167.33","status":"affected"},{"version":"1.167.36","status":"affected"}]},{"vendor":"@tanstack","product":"start-static-server-functions","versions":[{"version":"1.166.44","status":"affected"},{"version":"1.166.47","status":"affected"}]},{"vendor":"@tanstack","product":"start-storage-context","versions":[{"version":"1.166.38","status":"affected"},{"version":"1.166.41","status":"affected"}]},{"vendor":"@tanstack","product":"valibot-adapter","versions":[{"version":"1.166.12","status":"affected"},{"version":"1.166.15","status":"affected"}]},{"vendor":"@tanstack","product":"virtual-file-routes","versions":[{"version":"1.161.10","status":"affected"},{"version":"1.161.13","status":"affected"}]},{"vendor":"@tanstack","product":"vue-router","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"vue-router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"vue-router-ssr-query","versions":[{"version":"1.166.15","status":"affected"},{"version":"1.166.18","status":"affected"}]},{"vendor":"@tanstack","product":"vue-start","versions":[{"version":"1.167.61","status":"affected"},{"version":"1.167.64","status":"affected"}]},{"vendor":"@tanstack","product":"vue-start-client","versions":[{"version":"1.166.46","status":"affected"},{"version":"1.166.49","status":"affected"}]},{"vendor":"@tanstack","product":"vue-start-server","versions":[{"version":"1.166.50","status":"affected"},{"version":"1.166.53","status":"affected"}]},{"vendor":"@tanstack","product":"zod-adapter","versions":[{"version":"1.166.12","status":"affected"},{"version":"1.166.15","status":"affected"}]}],"references":["https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx","https://github.com/TanStack/router/issues/7383","https://tanstack.com/blog/npm-supply-chain-compromise-postmortem","https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem","https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-45321"],"weaknesses":["CWE-506"],"ingestedAt":"2026-10-29T20:12:07.131Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/45xxx/CVE-2026-45321.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-45321","state":"PUBLISHED","datePublished":"2026-05-12T00:12:35.452Z","dateUpdated":"2026-08-04T03:56:09.005Z","assignerShortName":"GitHub_M","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateReserved":"2026-05-11T20:50:30.539Z"},"containers":{"cna":{"title":"Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys","descriptions":[{"lang":"en","value":"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."}],"affected":[{"vendor":"@tanstack","product":"arktype-adapter","versions":[{"version":"1.166.12","status":"affected"},{"version":"1.166.15","status":"affected"}]},{"vendor":"@tanstack","product":"eslint-plugin-router","versions":[{"version":"1.161.9","status":"affected"},{"version":"1.161.12","status":"affected"}]},{"vendor":"@tanstack","product":"eslint-plugin-start","versions":[{"version":"0.0.4","status":"affected"},{"version":"0.0.7","status":"affected"}]},{"vendor":"@tanstack","product":"history","versions":[{"version":"1.161.9","status":"affected"},{"version":"1.161.12","status":"affected"}]},{"vendor":"@tanstack","product":"nitro-v2-vite-plugin","versions":[{"version":"1.154.12","status":"affected"},{"version":"1.154.15","status":"affected"}]},{"vendor":"@tanstack","product":"react-router","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"react-router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"react-router-ssr-query","versions":[{"version":"1.166.15","status":"affected"},{"version":"1.166.18","status":"affected"}]},{"vendor":"@tanstack","product":"react-start","versions":[{"version":"1.167.68","status":"affected"},{"version":"1.167.71","status":"affected"}]},{"vendor":"@tanstack","product":"react-start-client","versions":[{"version":"1.166.51","status":"affected"},{"version":"1.166.54","status":"affected"}]},{"vendor":"@tanstack","product":"react-start-rsc","versions":[{"version":"0.0.47","status":"affected"},{"version":"0.0.50","status":"affected"}]},{"vendor":"@tanstack","product":"react-start-server","versions":[{"version":"1.166.55","status":"affected"},{"version":"1.166.58","status":"affected"}]},{"vendor":"@tanstack","product":"router-cli","versions":[{"version":"1.166.46","status":"affected"},{"version":"1.166.49","status":"affected"}]},{"vendor":"@tanstack","product":"router-core","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"router-devtools-core","versions":[{"version":"1.167.6","status":"affected"},{"version":"1.167.9","status":"affected"}]},{"vendor":"@tanstack","product":"router-generator","versions":[{"version":"1.166.45","status":"affected"},{"version":"1.166.48","status":"affected"}]},{"vendor":"@tanstack","product":"router-plugin","versions":[{"version":"1.167.38","status":"affected"},{"version":"1.167.41","status":"affected"}]},{"vendor":"@tanstack","product":"router-ssr-query-core","versions":[{"version":"1.168.3","status":"affected"},{"version":"1.168.6","status":"affected"}]},{"vendor":"@tanstack","product":"router-utils","versions":[{"version":"1.161.11","status":"affected"},{"version":"1.161.14","status":"affected"}]},{"vendor":"@tanstack","product":"outer-vite-plugin","versions":[{"version":"1.166.53","status":"affected"},{"version":"1.166.56","status":"affected"}]},{"vendor":"@tanstack","product":"solid-router","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"solid-router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"solid-router-ssr-query","versions":[{"version":"1.166.15","status":"affected"},{"version":"1.166.18","status":"affected"}]},{"vendor":"@tanstack","product":"solid-start","versions":[{"version":"1.167.65","status":"affected"},{"version":"1.167.68","status":"affected"}]},{"vendor":"@tanstack","product":"solid-start-client","versions":[{"version":"1.166.50","status":"affected"},{"version":"1.166.53","status":"affected"}]},{"vendor":"@tanstack","product":"solid-start-server","versions":[{"version":"1.166.54","status":"affected"},{"version":"1.166.57","status":"affected"}]},{"vendor":"@tanstack","product":"start-client-core","versions":[{"version":"1.168.5","status":"affected"},{"version":"1.168.8","status":"affected"}]},{"vendor":"@tanstack","product":"start-fn-stubs","versions":[{"version":"1.161.9","status":"affected"},{"version":"1.161.12","status":"affected"}]},{"vendor":"@tanstack","product":"start-plugin-core","versions":[{"version":"1.169.23","status":"affected"},{"version":"1.169.26","status":"affected"}]},{"vendor":"@tanstack","product":"start-server-core","versions":[{"version":"1.167.33","status":"affected"},{"version":"1.167.36","status":"affected"}]},{"vendor":"@tanstack","product":"start-static-server-functions","versions":[{"version":"1.166.44","status":"affected"},{"version":"1.166.47","status":"affected"}]},{"vendor":"@tanstack","product":"start-storage-context","versions":[{"version":"1.166.38","status":"affected"},{"version":"1.166.41","status":"affected"}]},{"vendor":"@tanstack","product":"valibot-adapter","versions":[{"version":"1.166.12","status":"affected"},{"version":"1.166.15","status":"affected"}]},{"vendor":"@tanstack","product":"virtual-file-routes","versions":[{"version":"1.161.10","status":"affected"},{"version":"1.161.13","status":"affected"}]},{"vendor":"@tanstack","product":"vue-router","versions":[{"version":"1.169.5","status":"affected"},{"version":"1.169.8","status":"affected"}]},{"vendor":"@tanstack","product":"vue-router-devtools","versions":[{"version":"1.166.16","status":"affected"},{"version":"1.166.19","status":"affected"}]},{"vendor":"@tanstack","product":"vue-router-ssr-query","versions":[{"version":"1.166.15","status":"affected"},{"version":"1.166.18","status":"affected"}]},{"vendor":"@tanstack","product":"vue-start","versions":[{"version":"1.167.61","status":"affected"},{"version":"1.167.64","status":"affected"}]},{"vendor":"@tanstack","product":"vue-start-client","versions":[{"version":"1.166.46","status":"affected"},{"version":"1.166.49","status":"affected"}]},{"vendor":"@tanstack","product":"vue-start-server","versions":[{"version":"1.166.50","status":"affected"},{"version":"1.166.53","status":"affected"}]},{"vendor":"@tanstack","product":"zod-adapter","versions":[{"version":"1.166.12","status":"affected"},{"version":"1.166.15","status":"affected"}]}],"references":[{"url":"https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx","name":"https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx","tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/TanStack/router/issues/7383","name":"https://github.com/TanStack/router/issues/7383","tags":["x_refsource_MISC"]},{"url":"https://tanstack.com/blog/npm-supply-chain-compromise-postmortem","name":"https://tanstack.com/blog/npm-supply-chain-compromise-postmortem","tags":["x_refsource_MISC"]},{"url":"https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem","name":"https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem","tags":["x_refsource_MISC"]}],"metrics":[{"cvssV3_1":{"attackComplexity":"LOW","attackVector":"NETWORK","availabilityImpact":"HIGH","baseScore":9.6,"baseSeverity":"CRITICAL","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"NONE","scope":"CHANGED","userInteraction":"REQUIRED","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H","version":"3.1"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-506","lang":"en","description":"CWE-506: Embedded Malicious Code","type":"CWE"}]}],"providerMetadata":{"shortName":"GitHub_M","orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateUpdated":"2026-05-12T15:16:17.354Z"},"source":{"advisory":"GHSA-g7cv-rxg3-hmpx","discovery":"UNKNOWN"}},"adp":[{"title":"CISA ADP Vulnrichment","references":[{"url":"https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-45321","tags":["government-resource"]}],"metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-05-27T00:00:00+00:00","options":[{"Exploitation":"active"},{"Automatable":"no"},{"Technical Impact":"total"}],"role":"CISA Coordinator","version":"2.0.3","id":"CVE-2026-45321"}}},{"other":{"type":"kev","content":{"dateAdded":"2026-05-27","reference":"https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-45321"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-08-04T03:56:09.005Z"},"timeline":[{"time":"2026-05-27T00:00:00.000Z","lang":"en","value":"CVE-2026-45321 added to CISA KEV"}]}]}}}