Open Source ·

TanStack packages hit by Mini Shai-Hulud

TeamPCP's Mini Shai-Hulud worm compromised the TanStack Router release pipeline by chaining a pull_request_target "Pwn Request" pattern, GitHub Actions cache poisoning, and runtime extraction of a GitHub Actions OIDC trusted-publisher token from runner memory.

Part of Shai-Hulud hits npm and PyPI campaign

The TanStack wave of the May 2026 Mini Shai-Hulud worm was unusual in that the attacker did not merely steal a registry token and push a malicious tarball by hand. According to the project's public postmortem and follow-on analysis from Aikido, StepSecurity, and JFrog, the attacker abused the project's GitHub Actions release pipeline itself — chaining a pull_request_target "Pwn Request" pattern, GitHub Actions cache poisoning, and runtime extraction of trusted-publishing material from the runner while the workflow continued to look like official automation.

TanStack is a popular family of headless TypeScript libraries that includes React Query, the TanStack Router, and TanStack Start. According to Aikido, the malicious npm packages carried a new root-level payload file named router_init.js and added an optional dependency on a @tanstack/setup package sourced directly from a GitHub commit in the TanStack router repository. That dependency had a prepare script that ran a tanstack_runner.js payload with the Bun JavaScript runtime, then exited with a non-zero status. Because the dependency was marked optional, the visible install failure looked like routine noise — but the code had already executed.

The payload was built for developer workstations and CI/CD runners, Aikido said. It searched for GitHub and npm tokens, GitHub Actions OIDC material, AWS credentials and metadata endpoints, Kubernetes service account files, HashiCorp Vault tokens, environment variables, local filesystem secrets, and SSH material. Exfiltration and staging followed the broader Mini Shai-Hulud pattern, including the use of Session/Oxen infrastructure and GitHub-centered propagation logic.

Researchers said TanStack is worth recording separately because its package scope and release-pipeline evidence are unusually well documented. Aikido counted 83 TanStack package-version entries within a broader May 2026 wave that hit 373 malicious package-version entries across 169 npm package names. This record preserves the TanStack artifacts, while the campaign record at [[shai-hulud-here-we-go-again]] carries the shifting cross-ecosystem count.

Notes

  • The network and payload indicators are the campaign-level set JFrog published for this wave, not observations of this package's own bytes. They identify the wave's infrastructure and persistence, and are recorded here so each affected distribution surface carries them. Where a record also lists indicators read from an acquired sample, those are marked as such.
  • Aikido reported 83 TanStack package-version entries in the May 12 article. The artifact list here is retained from the TanStack/GitHub/StepSecurity/JFrog record set because package counts shifted while malicious releases were removed and newly identified.

Appendix · Affected releases

Indicators

  • file_sha256npm payload 29c729852fce5a53e30a1541d9fec79c915b2e13f1eda94a5978cf0aae0d88d9
  • file_sha256npm payload 2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96
  • file_sha256npm payload ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c
  • file_sha256npm payload d4a2086ea18f5e39cd867b8b06918a524eabb21d45ea98aad07357b98173458a
  • urlhttps://filev2.getsession.org/file/
  • domainseed1.getsession.org
  • domainseed2.getsession.org
  • domainseed3.getsession.org
  • domainapi.masscan.cloud
  • file~/.local/bin/gh-token-monitor.sh
  • file~/.config/systemd/user/gh-token-monitor.service
  • file~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • file~/.config/gh-token-monitor/
  • stringShai-Hulud: Here We Go Again
  • stringPUSH UR T3MPRR
  • stringFIRESCALE
  • commit_authorclaude@users.noreply.github.com
  • filerouter_init.js
  • filerouter_runtime.js
  • filetanstack_runner.js
  • package@tanstack/setup
  • dependencygithub:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c
  • commandbun run tanstack_runner.js
  • urlhxxp://filev2[.]getsession[.]org/file/
  • urlhxxp://169[.]254[.]169[.]254/latest/meta-data/iam/security-credentials/
  • urlhxxp://169[.]254[.]170[.]2
  • urlhxxps://registry[.]npmjs[.]org/-/npm/v1/tokens
  • servicevault[.]svc[.]cluster[.]local:8200
  • hashsha256:ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c
  • hashsha256:2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96
  • commit65bf499d16a5e8d25ba95d69ec9790a6dd4a1f14
  • commit79ac49eedf774dd4b0cfa308722bc463cfe5885c

References

  1. Security Advisory and Incident Discussion for TanStack Router npm Compromisegithub.com
  2. NPM Supply Chain Compromise Postmortemtanstack.com
  3. GitHub Advisory GHSA-g7cv-rxg3-hmpxgithub.com
  4. Mini Shai-Hulud is Back - A Self-Spreading Supply Chain Attack Hits the npm Ecosystemstepsecurity.io
  5. Shai-Hulud: Here We Go Againresearch.jfrog.com
  6. Socket package file listing for @tanstack/arktype-adapter 1.166.12socket.dev
  7. Socket package file listing for @tanstack/arktype-adapter 1.166.15socket.dev
  8. Socket package file listing for @tanstack/eslint-plugin-router 1.161.9socket.dev
  9. Socket package file listing for @tanstack/eslint-plugin-router 1.161.12socket.dev
  10. Socket package file listing for @tanstack/eslint-plugin-start 0.0.4socket.dev
  11. Socket package file listing for @tanstack/eslint-plugin-start 0.0.7socket.dev
  12. Socket package file listing for @tanstack/history 1.161.9socket.dev
  13. Socket package file listing for @tanstack/history 1.161.12socket.dev
  14. Socket package file listing for @tanstack/nitro-v2-vite-plugin 1.154.12socket.dev
  15. Socket package file listing for @tanstack/nitro-v2-vite-plugin 1.154.15socket.dev
  16. Socket package file listing for @tanstack/react-router 1.169.5socket.dev
  17. Socket package file listing for @tanstack/react-router 1.169.8socket.dev
  18. Socket package file listing for @tanstack/react-router-devtools 1.166.16socket.dev
  19. Socket package file listing for @tanstack/react-router-devtools 1.166.19socket.dev
  20. Socket package file listing for @tanstack/react-router-ssr-query 1.166.15socket.dev
  21. Socket package file listing for @tanstack/react-router-ssr-query 1.166.18socket.dev
  22. Socket package file listing for @tanstack/react-start 1.167.68socket.dev
  23. Socket package file listing for @tanstack/react-start 1.167.71socket.dev
  24. Socket package file listing for @tanstack/react-start-client 1.166.51socket.dev
  25. Socket package file listing for @tanstack/react-start-client 1.166.54socket.dev
  26. Socket package file listing for @tanstack/react-start-rsc 0.0.47socket.dev
  27. Socket package file listing for @tanstack/react-start-rsc 0.0.50socket.dev
  28. Socket package file listing for @tanstack/react-start-server 1.166.55socket.dev
  29. Socket package file listing for @tanstack/react-start-server 1.166.58socket.dev
  30. Socket package file listing for @tanstack/router-cli 1.166.46socket.dev
  31. Socket package file listing for @tanstack/router-cli 1.166.49socket.dev
  32. Socket package file listing for @tanstack/router-core 1.169.5socket.dev
  33. Socket package file listing for @tanstack/router-core 1.169.8socket.dev
  34. Socket package file listing for @tanstack/router-devtools 1.166.16socket.dev
  35. Socket package file listing for @tanstack/router-devtools 1.166.19socket.dev
  36. Socket package file listing for @tanstack/router-devtools-core 1.167.6socket.dev
  37. Socket package file listing for @tanstack/router-devtools-core 1.167.9socket.dev
  38. Socket package file listing for @tanstack/router-generator 1.166.45socket.dev
  39. Socket package file listing for @tanstack/router-generator 1.166.48socket.dev
  40. Socket package file listing for @tanstack/router-plugin 1.167.38socket.dev
  41. Socket package file listing for @tanstack/router-plugin 1.167.41socket.dev
  42. Socket package file listing for @tanstack/router-ssr-query-core 1.168.3socket.dev
  43. Socket package file listing for @tanstack/router-ssr-query-core 1.168.6socket.dev
  44. Socket package file listing for @tanstack/router-utils 1.161.11socket.dev
  45. Socket package file listing for @tanstack/router-utils 1.161.14socket.dev
  46. Socket package file listing for @tanstack/router-vite-plugin 1.166.53socket.dev
  47. Socket package file listing for @tanstack/router-vite-plugin 1.166.56socket.dev
  48. Socket package file listing for @tanstack/solid-router 1.169.5socket.dev
  49. Socket package file listing for @tanstack/solid-router 1.169.8socket.dev
  50. Socket package file listing for @tanstack/solid-router-devtools 1.166.16socket.dev
  51. Socket package file listing for @tanstack/solid-router-devtools 1.166.19socket.dev
  52. Socket package file listing for @tanstack/solid-router-ssr-query 1.166.15socket.dev
  53. Socket package file listing for @tanstack/solid-router-ssr-query 1.166.18socket.dev
  54. Socket package file listing for @tanstack/solid-start 1.167.65socket.dev
  55. Socket package file listing for @tanstack/solid-start 1.167.68socket.dev
  56. Socket package file listing for @tanstack/solid-start-client 1.166.50socket.dev
  57. Socket package file listing for @tanstack/solid-start-client 1.166.53socket.dev
  58. Socket package file listing for @tanstack/solid-start-server 1.166.54socket.dev
  59. Socket package file listing for @tanstack/solid-start-server 1.166.57socket.dev
  60. Socket package file listing for @tanstack/start-client-core 1.168.5socket.dev
  61. Socket package file listing for @tanstack/start-client-core 1.168.8socket.dev
  62. Socket package file listing for @tanstack/start-fn-stubs 1.161.9socket.dev
  63. Socket package file listing for @tanstack/start-fn-stubs 1.161.12socket.dev
  64. Socket package file listing for @tanstack/start-plugin-core 1.169.23socket.dev
  65. Socket package file listing for @tanstack/start-plugin-core 1.169.26socket.dev
  66. Socket package file listing for @tanstack/start-server-core 1.167.33socket.dev
  67. Socket package file listing for @tanstack/start-server-core 1.167.36socket.dev
  68. Socket package file listing for @tanstack/start-static-server-functions 1.166.44socket.dev
  69. Socket package file listing for @tanstack/start-static-server-functions 1.166.47socket.dev
  70. Socket package file listing for @tanstack/start-storage-context 1.166.38socket.dev
  71. Socket package file listing for @tanstack/start-storage-context 1.166.41socket.dev
  72. Socket package file listing for @tanstack/valibot-adapter 1.166.12socket.dev
  73. Socket package file listing for @tanstack/valibot-adapter 1.166.15socket.dev
  74. Socket package file listing for @tanstack/virtual-file-routes 1.161.10socket.dev
  75. Socket package file listing for @tanstack/virtual-file-routes 1.161.13socket.dev
  76. Socket package file listing for @tanstack/vue-router 1.169.5socket.dev
  77. Socket package file listing for @tanstack/vue-router 1.169.8socket.dev
  78. Socket package file listing for @tanstack/vue-router-devtools 1.166.16socket.dev
  79. Socket package file listing for @tanstack/vue-router-devtools 1.166.19socket.dev
  80. Socket package file listing for @tanstack/vue-router-ssr-query 1.166.15socket.dev
  81. Socket package file listing for @tanstack/vue-router-ssr-query 1.166.18socket.dev
  82. Socket package file listing for @tanstack/vue-start 1.167.61socket.dev
  83. Socket package file listing for @tanstack/vue-start 1.167.64socket.dev
  84. Socket package file listing for @tanstack/vue-start-client 1.166.46socket.dev
  85. Socket package file listing for @tanstack/vue-start-client 1.166.49socket.dev
  86. Socket package file listing for @tanstack/vue-start-server 1.166.50socket.dev
  87. Socket package file listing for @tanstack/vue-start-server 1.166.53socket.dev
  88. Socket package file listing for @tanstack/zod-adapter 1.166.12socket.dev
  89. Socket package file listing for @tanstack/zod-adapter 1.166.15socket.dev
  90. Mini Shai-Hulud Is Back: npm Worm Hits over 160 Packages, including Mistral and Tanstackaikido.dev
  91. TanStack npm Packages Compromised in Mini Shai-Hulud Supply Chain Attacksocket.dev
  92. Hybrid Analysis report for TanStack router_init.js SHA-256 ab4fcadahybrid-analysis.com

Source record: oss/attacks/tanstack-router/meta.yaml