En bref

  • GitHub et Grafana Labs ont officiellement confirmé le 21 mai 2026 que leurs brèches internes respectives sont imputables à la même chaîne d'attaque : la compromission des packages npm TanStack par le groupe TeamPCP.
  • Le vecteur d'entrée commun est l'extension VS Code Nx Console, dont une version vérolée a permis de dérober les identifiants GitHub de développeurs et d'infiltrer les pipelines CI/CD des deux organisations.
  • Les équipes de sécurité doivent auditer en urgence leurs dépendances @tanstack/*, purger leurs caches CI/CD et faire pivoter tous les tokens GitHub workflow potentiellement exposés entre le 11 et le 20 mai 2026.

L'enquête converge : un seul ver, deux victimes majeures, une chaîne d'attaque dévoilée

Le 21 mai 2026, Help Net Security et BleepingComputer ont simultanément publié les conclusions des investigations menées par GitHub et Grafana Labs concernant leurs brèches internes respectives. Les deux organisations confirment désormais que la chaîne d'attaque remonte à une seule et même source : la compromission des packages npm de l'écosystème TanStack par le groupe de menace TeamPCP, connu également sous les alias DeadCatx3, PCPcat, ShellForce et CipherForce.

L'attaque initiale, baptisée Mini Shai-Hulud par les chercheurs en sécurité, a été exécutée le 11 mai 2026. Le ver a compromis 84 artefacts npm répartis sur 42 packages @tanstack/*, ainsi que des packages @squawk/* et @mistralai/*. Pour y parvenir, TeamPCP a enchaîné trois techniques distinctes sans jamais déclencher les alertes habituelles : une attaque de type Pwn Request exploitant les GitHub Actions, une contamination du cache CI/CD, et une exploitation des tokens OIDC (OpenID Connect) pour s'authentifier et publier des versions vérolées des librairies. Chaque technique prise isolément est connue des défenseurs ; leur combinaison rapide et automatisée constitue ce qui a rendu cette campagne particulièrement difficile à détecter et à interrompre.

C'est Alexis Wales, Chief Information Security Officer de GitHub, qui a officiellement nommé l'extension VS Code Nx Console comme vecteur direct de la brèche subie par la plateforme. Dans une déclaration relayée par Help Net Security, Wales explique qu'un employé de GitHub avait installé la version vérolée de l'extension sur son poste de travail avant que la compromission ne soit publiquement connue. Cette version malveillante intégrait un payload JavaScript de vol d'identifiants qui a permis aux attaquants d'extraire les tokens d'authentification GitHub de la machine infectée, ouvrant ainsi l'accès aux systèmes internes de la plateforme.

La compromission de Nx Console elle-même s'explique par un effet de cascade partant de TanStack. L'un des mainteneurs de l'extension Nx Console avait ses outils de développement qui dépendaient de packages TanStack. Lorsque les versions vérolées ont été publiées le 11 mai, elles ont infecté son environnement de développement via le mécanisme automatique de mise à jour des dépendances. Les identifiants GitHub de ce développeur, stockés dans le GitHub CLI installé sur sa machine, ont alors été exfiltrés vers les serveurs de TeamPCP. Ces identifiants ont permis aux attaquants d'exécuter des workflows dans le repository Nx Console, d'y injecter du code malveillant et de publier des versions corrompues de l'extension, laquelle compte 2,2 millions d'installations actives dans les environnements de développement du monde entier.

Au total, la brèche GitHub a conduit à l'exfiltration d'environ 3 800 dépôts internes privés de la plateforme. GitHub a précisé qu'il n'existe aucune preuve que des données clients stockées en dehors de ces dépôts internes aient été compromises. L'entreprise a révoqué l'ensemble des tokens d'accès potentiellement exposés, renforcé ses contrôles sur les extensions VS Code autorisées dans ses environnements de travail, et lancé un programme d'audit de ses propres dépendances logicielles tierces.

Le cas Grafana Labs offre un éclairage complémentaire sur les mécanismes de propagation de l'attaque. Selon le billet de blog sécurité publié par l'organisation, Grafana a détecté l'activité malveillante dès le 11 mai et a immédiatement initié son plan de réponse à incident. L'équipe sécurité a procédé à la rotation d'un nombre significatif de tokens de workflow GitHub. Cependant, un token unique a échappé à ce processus de rotation — une omission qui a permis aux attaquants d'accéder aux repositories GitHub de Grafana Labs plusieurs jours après que l'alerte initiale avait été traitée. Selon BleepingComputer, la brèche Grafana a été causée par ce seul token manqué lors de la rotation post-TanStack. Grafana a confirmé qu'aucun code malveillant n'avait été injecté dans les releases publiques de ses outils de monitoring et que les systèmes de production clients n'avaient pas été affectés.

L'ampleur totale de la campagne Mini Shai-Hulud dépasse largement ces deux organisations emblématiques. Plus de 400 versions malveillantes de 170 packages ont été publiées au total, touchant les 42 packages TanStack, 65 packages UiPath, les packages PyPI de Mistral AI, le client JavaScript OpenSearch, une douzaine de packages Squawk et le package PyPI de Guardrails AI. OpenAI avait précédemment confirmé que deux appareils d'employés avaient été impactés via le même vecteur, sans que des données utilisateurs, des systèmes de production ou de la propriété intellectuelle n'aient été compromis. Le registre npm avait pris des mesures préventives pour retirer les versions malveillantes, mais l'automatisation du ver avait permis à certaines versions corrompues d'être téléchargées plusieurs milliers de fois avant leur suppression.

Sur le plan technique, la sophistication de l'attaque réside dans son caractère multi-étapes, dans l'exploitation des mécanismes de confiance inhérents à l'écosystème open source moderne, et dans son automatisation poussée. Le ver Mini Shai-Hulud ne requiert pas d'intervention manuelle des attaquants à chaque étape : une fois le premier package compromis, il propage lui-même la contamination aux packages qui l'intègrent comme dépendance, créant un effet de contagion exponentielle que les défenses périmétriques traditionnelles ne sont pas conçues pour détecter. Les analystes de Snyk qui ont disséqué le ver soulignent que la chaîne GitHub Actions compromis, cache poisoning, exploitation des tokens OIDC constitue une évolution qualitative des attaques supply chain observées jusqu'ici.

Pourquoi cette attribution change la donne pour toute la sécurité logicielle

La confirmation simultanée par GitHub et Grafana Labs que leurs brèches partagent le même vecteur d'attaque n'est pas qu'un détail d'enquête : c'est un signal d'alarme systémique pour l'ensemble de l'industrie logicielle. GitHub n'est pas une cible périphérique ; c'est l'infrastructure centrale sur laquelle repose le développement logiciel mondial, avec plus d'un milliard de dépôts hébergés. Grafana Labs produit des outils de monitoring utilisés par des milliers d'organisations critiques à travers le monde. Si des organisations de ce calibre, disposant d'équipes sécurité expérimentées, peuvent être compromises par ricochet à travers une dépendance tierce, aucune organisation utilisant l'écosystème npm ne peut se considérer à l'abri par le seul biais de ses contrôles internes.

L'affaire TanStack illustre également l'inefficacité relative des modèles de confiance actuels dans l'écosystème npm. Les tokens OIDC, présentés comme une avancée majeure de sécurité par rapport aux secrets statiques, ont ici été détournés de leur fonction protectrice. Le cache CI/CD, censé accélérer les builds, est devenu un vecteur de propagation silencieux. Les extensions VS Code, largement adoptées pour leur praticité, constituent des points d'entrée privilégiés que peu d'organisations auditent avec rigueur. L'incident confirme que la sécurité de la chaîne logicielle ne peut plus reposer sur la confiance implicite accordée aux outils de développement populaires, aussi réputés soient-ils.

D'un point de vue réglementaire, cet incident s'inscrit dans un contexte de durcissement rapide des exigences. En Europe, la directive NIS2 impose aux entités essentielles et importantes de gérer les risques liés à leurs fournisseurs et prestataires tiers, y compris les composants open source intégrés dans leurs systèmes. Le Cyber Resilience Act (CRA), dont les premières obligations s'appliquent progressivement jusqu'en 2027, imposera des obligations de sécurité aux fabricants de produits contenant des composants logiciels, incluant les dépendances tierces. L'ANSSI recommande depuis 2024 l'adoption systématique des SBOM (Software Bill of Materials) pour cartographier l'ensemble des composants intégrés dans les systèmes d'information. Les organisations qui avaient déjà mis en place un SBOM automatisé ont pu identifier et isoler les versions affectées en quelques heures ; les autres ont perdu plusieurs jours en analyses manuelles, avec un risque d'exposition prolongé.

Pour les entreprises françaises, cet incident doit également rappeler l'importance du processus de rotation systématique des secrets, y compris dans les scénarios de réponse à incident. La leçon de Grafana Labs est particulièrement instructive : l'organisation avait réagi promptement à l'alerte initiale, mais un unique token manqué lors de la rotation d'urgence a suffi à permettre une intrusion complémentaire. Les plans de réponse à incident doivent désormais intégrer des procédures de vérification exhaustive et automatisée de la révocation des accès, en s'appuyant sur des outils capables de cartographier et révoquer l'ensemble des tokens, credentials et permissions actifs dans un environnement GitHub en quelques minutes.

Ce qu'il faut retenir

  • GitHub (CISO Alexis Wales) et Grafana Labs ont officiellement attribué leurs brèches internes à la compromission des packages npm TanStack par TeamPCP via le ver Mini Shai-Hulud, confirmée le 21 mai 2026.
  • Le vecteur de propagation clé est l'extension VS Code Nx Console (2,2 M d'installations), dont une version vérolée a servi de pont entre les environnements développeurs infectés et les pipelines CI/CD des victimes.
  • Toute organisation utilisant des packages @tanstack/*, @mistralai/* ou UiPath npm doit auditer ses dépendances, purger ses caches CI/CD et faire pivoter l'ensemble de ses tokens GitHub workflow ayant été actifs entre le 11 et le 20 mai 2026.

Comment détecter une éventuelle contamination par Mini Shai-Hulud dans mon environnement ?

Vérifiez dans vos logs npm et votre historique de build si des versions des packages @tanstack/* publiées entre le 11 et le 20 mai 2026 ont été installées. Examinez les extensions VS Code déployées sur les postes développeurs, notamment Nx Console, et comparez les hashs des versions installées avec les versions officielles publiées après le 20 mai. Auditez l'activité GitHub Actions de vos repositories pour détecter toute exécution de workflow non autorisée ou tout token OIDC utilisé en dehors des plages horaires habituelles. En cas de doute, révoquez immédiatement tous les tokens GitHub workflow actifs et procédez à une rotation complète de vos secrets CI/CD.

Besoin d'un accompagnement expert ?

Ayi NEDJIMI vous accompagne sur vos projets cybersécurité et IA.

Prendre contact