{"id":883,"date":"2026-05-12T09:34:01","date_gmt":"2026-05-12T09:34:01","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=883"},"modified":"2026-05-12T09:34:01","modified_gmt":"2026-05-12T09:34:01","slug":"mini-shai-hulud-worm-compromises-tanstack-mistral-ai-guardrails-ai-more-packages","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=883","title":{"rendered":"Mini Shai-Hulud Worm Compromises TanStack, Mistral AI, Guardrails AI &#038; More Packages"},"content":{"rendered":"<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhXIhs2kZt0YGdDcd-Io67mq1GIN_iI_71LYhuin4qqmlgUgCuZ3fGUvglg_5nh5DK8kfPP8RHki86yMyqh4rTE27PGgPBh4RQjkh91-QGoB8cav5NUsYAwcV3ZJ7aEf-uEoH3pLGQ2eWuCh8lZSWAlTIa2U5I6eeB3HZmYMn4q-YoV7Ytmkpr1tN0lC2rG\/s1700-e365\/mistral.jpg\" style=\"clear: left; display: block; float: left;  text-align: center;\"><\/a><\/div>\n<p><b>TeamPCP<\/b>, the threat actor behind the recent<b>\u00a0<\/b>supply chain attack spree, has been linked to the compromise of the npm and PyPI packages from TanStack, UiPath, Mistral AI, OpenSearch, and Guardrails AI as part of a fresh Mini Shai-Hulud campaign.<\/p>\n<p>The affected npm packages have been modified to include an obfuscated JavaScript file (\u00abrouter_init.js\u00bb) that&#8217;s designed to profile the execution environment and launch a comprehensive credential stealer capable of targeting cloud providers, cryptocurrency wallets, AI tools, messaging apps, and CI systems, including Github Actions, <a href=\"https:\/\/www.aikido.dev\/blog\/mini-shai-hulud-is-back-tanstack-compromised\">Aikido Security<\/a>, <a href=\"https:\/\/www.endorlabs.com\/learn\/shai-hulud-compromises-the-tanstack-ecosystem-80-packages-compromised\">Endor Labs<\/a>, <a href=\"https:\/\/safedep.io\/mass-npm-supply-chain-attack-tanstack-mistral\/\">SafeDep<\/a>, <a href=\"https:\/\/socket.dev\/blog\/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack\">Socket<\/a>, and <a href=\"https:\/\/www.stepsecurity.io\/blog\/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem\">StepSecurity<\/a> said. The data is exfiltrated to the \u00abfilev2.getsession[.]org\u00bb domain.<\/p>\n<p>Using Session Protocol infrastructure is a deliberate attempt on the part of the attackers to evade detection, as the domain is unlikely to be blocked within enterprise environments, given that it belongs to a decentralized, privacy-focused messaging service. As a fallback option, the encrypted data is committed to attacker-controlled repositories under the author name \u00abclaude@users.noreply.github.com\u00bb via the GitHub GraphQL API using the stolen GitHub tokens.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/threatlabz-vpn-risk-2026-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhnNON5UeWywT7OcPNw7V4L7QNWnCnm7Xl_99Y9ek8dL-gRwx-bWxQM1TKqt8deqqrdpUyKMuuijAWyyPQVB0s0qf8ntQ6ldFAJLru-QUWhddKTopc7SeNbBBnd-TsfFyRPP-AAyDuclLlL6XHK4_LXqDC_7eyaz9pzToYr7U543MhrJ7qcK-89sVWHTQUZ\/s728-e100\/zz-2-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>The malware is also capable of establishing persistence hooks in Claude Code and Microsoft Visual Studio Code (VS Code) to survive reboots and re-execute the stealer on every launch of the IDEs.<\/p>\n<p>Furthermore, it installs a gh-token-monitor service to monitor and re-exfiltrate GitHub tokens, and injects two malicious GitHub Actions workflows to serialize repository secrets into a JSON object and upload the data to an external server (\u00abapi.masscan[.]cloud\u00bb).\u00a0<\/p>\n<p>TanStack has since <a href=\"https:\/\/tanstack.com\/blog\/npm-supply-chain-compromise-postmortem\">traced<\/a> the compromise to a chained GitHub Actions attack involving the \u00abpull_request_target\u00bb trigger, <a href=\"https:\/\/adnanthekhan.com\/2024\/05\/06\/the-monsters-in-your-build-cache-github-actions-cache-poisoning\/\">GitHub Actions cache poisoning<\/a>, and runtime memory extraction of an OIDC token from the GitHub Actions runner process. \u00abNo npm tokens were stolen, and the npm publish workflow itself was not compromised,\u00bb TanStack said.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgcDgUQOKnNQ-iSErOMUzl8A4sBrF5Mx3eFM-SFc66GgY3OroIZa1IQ96JZhFL1o2PqsvBj0e6F0jycjdbt4pmAxoK2BpGDvz8iIuiCGO_vMypxsw9PJis9ty6a_0OdzRVS3fiT1Gzwfn4C_jA8IDp3bevWo_GrUbMchilpS8NqGiaAel_nO1fb8_XnFXBx\/s1700-e365\/main.png\" style=\"clear: left; display: block; float: left;  text-align: center;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgcDgUQOKnNQ-iSErOMUzl8A4sBrF5Mx3eFM-SFc66GgY3OroIZa1IQ96JZhFL1o2PqsvBj0e6F0jycjdbt4pmAxoK2BpGDvz8iIuiCGO_vMypxsw9PJis9ty6a_0OdzRVS3fiT1Gzwfn4C_jA8IDp3bevWo_GrUbMchilpS8NqGiaAel_nO1fb8_XnFXBx\/s1700-e365\/main.png\" alt=\"\" border=\"0\" data-original-height=\"1858\" data-original-width=\"3072\"\/><\/a><\/div>\n<p>Specifically, the attackers are assessed to have staged the malicious payload in a GitHub fork, injected it into published npm tarballs, then hijacked the project&#8217;s legitimate \u00abTanStack\/router\u00bb workflow to publish the compromised versions with valid SLSA provenance.\u00a0<\/p>\n<p><a name=\"more\"\/><\/p>\n<p>What makes the worm stand out is its ability to spread itself to other packages by locating a publishable npm token with bypass_2fa set to true, enumerating every package published by the same maintainer, and exchanging a GitHub OIDC token for a per-package publish token to sidestep traditional authentication entirely.<\/p>\n<p>The TanStack supply chain compromise has been assigned the CVE identifier <a href=\"https:\/\/github.com\/TanStack\/router\/security\/advisories\/GHSA-g7cv-rxg3-hmpx\">CVE-2026-45321<\/a>. It carries a CVSS score of 9.6 out of a maximum of 10.0, indicating critical severity. The incident has impacted 42 packages and 84 versions across the TanStack ecosystem.<\/p>\n<p>\u00abThe attack published malicious versions through the project&#8217;s own GitHub Actions release pipeline using hijacked OIDC tokens,\u00bb StepSecurity researcher Ashish Kurmi said.<\/p>\n<p>\u00abIn an extremely rare escalation, the compromised packages carry valid SLSA Build Level 3 provenance attestations, making this the first documented npm worm that produces validly attested malicious packages. The worm has since spread beyond TanStack to packages from UiPath, DraftLab, and other maintainers.\u00bb<\/p>\n<p>Besides TanStack, the Mini Shai-Hulud campaign has also spread to several other packages, including some in PyPI &#8211;<\/p>\n<ul>\n<li>guardrails-ai@0.10.1 (PyPI)<\/li>\n<li>mistralai@2.4.6 (PyPI)<\/li>\n<li>@opensearch-project\/opensearch@3.5.3, 3.6.2, 3.7.0, and 3.8.0<\/li>\n<li>@squawk\/mcp@0.9.5<\/li>\n<li>@squawk\/weather@0.5.10<\/li>\n<li>@squawk\/flightplan@0.5.6<\/li>\n<li>@tallyui\/connector-medusa@1.0.1, 1.0.2, and 1.0.3<\/li>\n<li>@tallyui\/connector-vendure@1.0.1, 1.0.2, and 1.0.3<\/li>\n<\/ul>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-cant-stop-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjPEV6-530TOlxG6PjrmdlY623wpBwduZ7t1HV6flcmO5R4q4AmfixDUzW0CrhlvMVNWbhvOIso-UDNTka4W_W9Chrdj_dglwBZwi7DuePM2IMIl-hfUYVIqBXgfpr_2619K8Gptb4LzwJ6gUbi7lWl2M8AFQJsHEaw63Q7tZ6708YGruiHrr0Y2W9YYxLQ\/s728-e100\/ThreatLocker-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Microsoft, in its <a href=\"https:\/\/x.com\/MsftSecIntel\/status\/2054041471280423424\">analysis<\/a> of the malicious mistralai PyPI package, said it&#8217;s designed to download a credential stealer from a remote server (\u00ab83.142.209[.]194\u00bb) that includes country-aware logic to avoid Russian-language environments and a \u00abgeofenced destructive branch that has a 1-in-6 chance of executing rm -rf \/ when the system appears to be in Israel or Iran.\u00bb<\/p>\n<p>\u00abThe guardrails-ai@0.10.1 compromise is especially notable because the malicious code executes on import,\u00bb Socket said. \u00abThe package checks for Linux systems, downloads a remote Python artifact from https:\/\/git-tanstack.com\/transformers.pyz, writes it to \/tmp\/transformers.pyz, and executes it with python3 without integrity verification.\u00bb<\/p>\n<p>\u00abThis latest activity shows the campaign continuing to propagate across both npm and PyPI, with affected packages spanning search infrastructure, AI tooling, aviation-related developer packages, enterprise automation, frontend tooling, and CI\/CD-adjacent ecosystems.\u00bb<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>TeamPCP, the threat actor behind the recent\u00a0supply chain attack spree, has been linked to the compromise of the npm and PyPI packages from TanStack, UiPath, Mistral AI, OpenSearch, and Guardrails&hellip;<\/p>\n","protected":false},"author":1,"featured_media":884,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[173,1622,1618,1621,35,1619,1620,821],"class_list":["post-883","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-compromises","tag-guardrails","tag-mini","tag-mistral","tag-packages","tag-shaihulud","tag-tanstack","tag-worm"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=883"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/883\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/884"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=883"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=883"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}