Mini Shai-Hulud Frappe Encore : Une Attaque de Chaîne d'Approvisionnement Compromet les Packages TanStack, UiPath et Mistral AI
Une attaque sophistiquée de chaîne d'approvisionnement, baptisée 'Mini Shai-Hulud', a compromis de nombreux packages **npm** et **PyPI**, y compris ceux de **TanStack**, **UiPath**, **Mistral AI**, **OpenSearch** et **Guardrails AI**. L'attaque, attribuée à l'acteur de menace **TeamPCP**, exploite des GitHub Actions et des jetons OIDC détournés pour distribuer des malwares et voler des identifiants sensibles.

La dernière campagne de **TeamPCP**, baptisée Mini Shai-Hulud, témoigne d'une évolution des tactiques d'attaque de chaîne d'approvisionnement, impactant l'intégrité des écosystèmes de développement logiciel.
### Techniques de Vol d'Identifiants et d'Évasion
Les packages **npm** compromis ont été modifiés pour inclure un fichier JavaScript obfusqué ("router_init.js"). Ce script malveillant profile l'environnement d'exécution et déploie un voleur d'identifiants complet. Le voleur cible les fournisseurs cloud, les portefeuilles de cryptomonnaies, les outils d'IA, les applications de messagerie et les systèmes CI comme Github Actions. Les rapports de **Aikido Security**, **Endor Labs**, **SafeDep**, **Socket**, **StepSecurity** et **Snyk** détaillent l'attaque, notant que les données exfiltrées sont envoyées à "filev2.getsession[.]org".
Les attaquants utilisent l'infrastructure du protocole de session, probablement pour échapper à la détection en se fondant dans le trafic légitime du service de messagerie axé sur la confidentialité. En guise de sauvegarde, les données chiffrées sont également committées dans des dépôts contrôlés par les attaquants sous le nom d'auteur "[email protected]" via l'API GraphQL de GitHub, en utilisant des jetons GitHub volés.
### Persistance et Mouvement Latéral
Le malware fait preuve de persistance en établissant des hooks dans **Claude Code** et **Microsoft Visual Studio Code** (**VS Code**), garantissant que le voleur se réexécute à chaque lancement des IDE. Un service `gh-token-monitor` est installé pour surveiller et ré-exfiltrer en continu les jetons GitHub. De plus, des workflows GitHub Actions malveillants sont injectés pour sérialiser les secrets du dépôt dans un objet JSON et télécharger les données sur un serveur externe ("api.masscan[.]cloud").
### Vecteurs d'Infection Évolutifs
Contrairement aux attaques précédentes ciblant les packages **SAP**, cette campagne emploie une nouvelle stratégie. Au lieu de hooks de préinstallation, le fichier JavaScript malveillant est inclus dans le tarball du package, ainsi qu'une dépendance optionnelle pointant vers un package hébergé sur GitHub. Cette dépendance GitHub contient un hook de cycle de vie `prepare` qui exécute le payload JavaScript en utilisant le runtime **Bun**.
Pour les packages **Mistral AI**, l'attaque revient à l'approche antérieure, remplaçant le contenu du fichier `package.json` par un hook de préinstallation pour invoquer `node setup.mjs`, qui télécharge **Bun** et exécute le même malware JavaScript.
### CVE-2026-45321 : Vulnérabilité Critique dans TanStack
Le compromis de la chaîne d'approvisionnement **TanStack** est suivi sous le nom **CVE-2026-45321**, avec un score CVSS critique de 9,6 sur 10,0. L'incident a touché 42 packages et 84 versions dans l'écosystème **TanStack**.
**TanStack** a retracé le compromis à une attaque chaînée GitHub Actions impliquant le déclencheur `pull_request_target`, le empoisonnement du cache GitHub Actions et l'extraction en mémoire d'un jeton OIDC du processus du runner GitHub Actions. Selon **TanStack**, aucun jeton **npm** n'a été volé, et le workflow de publication **npm** lui-même n'a pas été directement compromis.

Le chercheur **StepSecurity** Ashish Kurmi a souligné que les versions malveillantes ont été publiées via le pipeline de publication GitHub Actions du projet en utilisant des jetons OIDC détournés. Notamment, les packages compromis portent des attestations de provenance SLSA Build Level 3 valides, ce qui en fait le premier ver npm documenté à produire des packages malveillants valablement attestés. Le ver s'est depuis étendu au-delà de **TanStack** à des packages de **UiPath**, DraftLab et d'autres mainteneurs.
### Abus de la Publication de Confiance et des Jetons OIDC
L'attaque exploite la publication de confiance, permettant au code contrôlé par l'attaquant s'exécutant dans un workflow d'utiliser ses permissions OIDC pour générer un jeton de publication de courte durée pendant la construction et l'utiliser pour publier les packages sans avoir besoin de voler un jeton **npm**. Le ver se propage en localisant un jeton **npm** publiable avec `bypass_2fa` défini sur true, en énumérant les packages publiés par le même mainteneur, et en échangeant un jeton OIDC GitHub contre un jeton de publication par package.
Le chercheur **Endor Labs** Peyton Kennedy a expliqué que le commit orphelin a déclenché une exécution de workflow GitHub Actions sur la surface du workflow légitime **TanStack/router**. Comme la configuration du publisher de confiance OIDC du dépôt accordait la confiance au niveau du dépôt plutôt qu'à une branche protégée et un fichier de workflow spécifiques, l'exécution du workflow déclenchée par ce commit pouvait demander un jeton de publication **npm** valide et de courte durée.
### Dead-Man's Switch et Payload Destructeur
Une nouvelle tactique introduite dans le malware JavaScript obfusqué est l'installation d'un dead-man's switch. Ce switch utilise un script shell pour vérifier périodiquement si un jeton **npm** créé par le malware est révoqué en interrogeant le point de terminaison `api.github.com/user` toutes les 60 secondes. Le jeton est décrit comme "IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner."
Si le développeur révoque le jeton de son tableau de bord **npm**, le script déclenche une routine destructive qui exécute `rm -rf ~/` sur la machine infectée, la transformant effectivement en malware de type wiper. Il est conseillé aux développeurs de ne pas révoquer les jetons **npm** avant d'avoir isolé et imaginé le système.
### Implications Plus Larges et Stratégies de Défense
Le responsable de la recherche en sécurité **Upwind** Avital Harel a souligné que cette campagne reflète un changement dans les attaques de chaîne d'approvisionnement vers une propagation axée sur l'identité via l'infrastructure CI/CD de confiance. Avec les attaquants accédant aux workflows de publication et aux identités de pipeline, le processus de livraison logicielle devient le mécanisme de distribution. La défense contre cela nécessite une visibilité comportementale accrue pendant les installations et les builds.
### Packages Impactés
Outre **TanStack**, la campagne Mini Shai-Hulud s'est étendue aux packages suivants :
* [email protected] (PyPI)
* [email protected] (PyPI)
* @opensearch-project/[email protected], 3.6.2, 3.7.0, et 3.8.0
* @squawk/[email protected]
* @squawk/[email protected]
* @squawk/[email protected]
* @tallyui/[email protected], 1.0.2, et 1.0.3
* @tallyui/[email protected], 1.0.2, et 1.0.3
**OX Security** rapporte que l'incident a affecté plus de 170 packages couvrant les registres **npm** et **PyPI**, avec plus de 518 millions de téléchargements cumulés. Plus de 400 dépôts avec des identifiants volés ont été créés dans le cadre de cette vague d'attaques, contenant tous la chaîne "Shai-Hulud: Here We Go Again."
**Google**-owned Wiz a rapporté que le payload exfiltrait également les identifiants volés via un troisième canal redondant.