Voici ce qui s'est réellement passé, étape par étape : Le 18 mai, des acteurs malveillants ont compromis le compte de publication de Nrwl (l'entreprise derrière Nx Console) sur le marché VS Code. Entre 12:36 et 12:47 UTC ce jour-là, ils ont poussé la version 18.3.4 de Nx Console contenant du code malveillant sur le marché en utilisant les identifiants légitimes de l'éditeur. La version compromise était cryptographiquement signée avec le certificat valide de l'éditeur Nrwl, ce qui explique pourquoi la vérification intégrée de VS Code l'a acceptée sans avertissement. Lorsqu'une instance de VS Code de n'importe quel développeur vérifiait les mises à jour des extensions pendant cette fenêtre de 11 minutes (ou lors d'une installation manuelle de Nx Console durant cette période), elle téléchargeait directement la version infectée à partir du marché officiel de Microsoft. L'extension n'a pas été piratée dans le sens où quelqu'un aurait modifié des fichiers sur un serveur, elle a été publiée par la porte d'entrée en utilisant des identifiants d'éditeur volés. Comment les attaquants ont-ils obtenu initialement les identifiants de publication de Nrwl sur le marché? C'est la partie qui manque à la plupart des couvertures. La publication sur le marché VS Code nécessite soit un jeton d'accès personnel (PAT) d'Azure DevOps, soit des identifiants OAuth liés à un compte Microsoft. Ces identifiants ont presque certainement été récoltés à partir d'une compromission précédente de la chaîne d'approvisionnement, peut-être lors d'une vague antérieure de la même campagne. Cela crée un modèle d'échec en cascade : compromettre un outil de développement pour voler des identifiants, utiliser ces identifiants pour publier des versions malveillantes d'un autre outil de développement, utiliser cet outil pour voler plus d'identifiants, répéter. Chaque itération augmente l'accès de l'attaquant aux comptes d'éditeurs à travers l'écosystème. La compromission de Nx Console n'était pas le point zéro, elle était déjà profondément dans la chaîne. Une fois l'extension empoisonnée installée sur la machine d'un développeur (y compris l'employé GitHub au centre de cette histoire), elle a exécuté automatiquement du code qui a scanné l'ensemble de la machine à la recherche d'identifiants. Les extensions de VS Code sont écrites en JavaScript et TypeScript, et elles s'exécutent dans Node.js, le même runtime JavaScript qui alimente VS Code lui-même. Lorsqu'une extension est installée, VS Code charge son code JavaScript directement dans l'espace du processus de l'éditeur avec un accès complet aux API Node.js. Le code malveillant dans Nx Console 18.3.4 a utilisé les API du système de fichiers Node.js (spécifiquement fs.readFile, fs.readdir et les fonctions de parcours de chemin) pour scanner récursivement le répertoire personnel de l'utilisateur et les emplacements de stockage d'identifiants courants. Il a recherché des fichiers correspondant à des modèles tels que.npmrc,.aws/credentials,.kube/config,.ssh/,.gitconfig,.netrc, et des fichiers de configuration pour 1Password CLI, HashiCorp Vault et Claude Code. L'extension a aussi appelé des API de processus enfant de Node.js (child_process.exec et child_process.spawn) pour exécuter des commandes système qui déversent des variables d'environnement, interrogent le trousseau de clés du système sur macOS (en utilisant l'outil en ligne de commande security) et extraient des identifiants du Gestionnaire d'informations d'identification Windows (en utilisant cmdkey). Tout cela se déroule en JavaScript pur exécuté avec les mêmes privilèges que l'utilisateur qui a lancé VS Code. Il n'y a pas de sandboxing, pas d'invites de permission, pas d'isolation au niveau du système d'exploitation. Les extensions VS Code sont conçues comme du code de confiance. Les identifiants récoltés ont ensuite été exfiltrés en utilisant le module https intégré de Node.js pour envoyer les données aux domaines contrôlés par les attaquants. Le code malveillant a obscurci le point de terminaison d'exfiltration en utilisant un encodage base64 et une concaténation de chaînes pour échapper à l'analyse statique, mais une fois l'extension exécutée, elle a effectué des requêtes HTTPS directes pour envoyer des charges utiles JSON compressées contenant chaque identifiant trouvé. Le fichier package.json de l'extension déclarait des événements d'activation qui la faisaient s'exécuter immédiatement au démarrage de VS Code (en utilisant l'événement d'activation "*", qui se déclenche à l'ouverture de tout espace de travail), ce qui signifie que les développeurs n'avaient pas besoin d'invoquer explicitement les fonctionnalités de Nx Console pour que le code malveillant s'exécute. Juste avoir VS Code en cours d'exécution avec l'extension installée était suffisant. La charge utile JavaScript a également injecté des hooks dans les propres API de stockage d'identifiants de VS Code (en utilisant les API vscode.authentication et vscode.workspace) pour intercepter tout identifiant auquel l'utilisateur accédait pendant sa session de travail, y compris les jetons OAuth GitHub que VS Code utilise pour sa propre intégration Git. À partir de là, l'attaquant a utilisé ces identifiants volés pour installer une deuxième extension empoisonnée sur la même machine de l'employé (GitHub n'a pas encore révélé quelle était cette extension). Cette deuxième extension a exfiltré environ 3 800 dépôts internes de GitHub au cours des heures ou des jours suivants. Le 20 mai, le groupe de menace TeamPCP faisait déjà la publicité des dépôts volés à la vente sur un forum de piratage pour 50 000 $ et plus, quelques heures avant que GitHub ne confirme publiquement la brèche. Les dépôts internes ne sont pas des données clients, ce sont quelque chose de pire pour la sécurité de l'infrastructure. Ces dépôts contiennent des scripts de déploiement, des identifiants de staging, des schémas d'API internes et des configurations d'infrastructure. L'accès au code source à ce niveau donne aux attaquants une vue d'ensemble sur la manière dont les systèmes de GitHub se connectent, s'authentifient et échouent. Chaque secret qui atteint un acheteur raccourcit la phase de reconnaissance pour toute attaque que cet acheteur planifiait déjà. Le cofondateur de Binance, CZ, a immédiatement averti quiconque avec des repos privés contenant des secrets en clair de tout faire tourner. Mike Riemer, CTO d'Ivanti, m'a dit que le réseau honeypot d'Azure montre maintenant des vulnérabilités connues exploitées en moins de 90 secondes, et que des identifiants volés peuvent réduire encore plus rapidement cette chronologie. La brèche de GitHub n'est pas arrivée toute seule. Le 19 mai, Endor Labs a détecté 42 paquets npm malveillants (le suivi plus large de Socket a trouvé 639 versions malveillantes sur 323 paquets) publiés dans l'écosystème de visualisation de données @antv d'Alibaba, qui voit environ 16 millions de téléchargements hebdomadaires. Cette vague a introduit la falsification de provenance : le ver Mini Shai-Hulud appelle maintenant Fulcio et Rekor à l'exécution pour générer des certificats de signature Sigstore valides pour chaque paquet qu'il propagent. L'outil de provenance montre un badge vert. La chaîne de construction appartient à l'attaquant. Peyton Kennedy, chercheur principal en sécurité chez Endor Labs, m'a dit que "TanStack avait la bonne configuration sur le papier : publication de confiance OIDC, provenance signée, 2FA sur chaque compte mainteneur. L'attaque a quand même fonctionné." Également le 19 mai, les acteurs de la menace ont compromis le workflow GitHub Actions actions-cool/issues-helper en redirigeant chaque tag existant vers un commit imposteur contenant du code malveillant qui exfiltre des identifiants des pipelines CI/CD (Intégration Continue / Déploiement Continu). Le domaine d'exfiltration correspondait à la vague Mini Shai-Hulud de @antv, reliant les clusters ensemble. Quelques heures plus tard, Wiz a détecté que TeamPCP avait compromis durabletask, le client Python officiel de Microsoft pour le cadre d'exécution de workflows Durable Task. Trois versions malveillantes ont été publiées sur PyPI (Python Package Index) dans une fenêtre de 35 minutes utilisant un compte GitHub compromis lors d'une opération précédente de TeamPCP. La charge utile vole des identifiants d'AWS (Amazon Web Services), Azure, GCP (Google Cloud Platform), Kubernetes, et plus de 90 configurations d'outils pour développeurs, puis se propage latéralement à travers l'infrastructure cloud. Le paquet enregistre en moyenne plus de 400 000 téléchargements mensuels. L'ensemble du schéma se répète : compromettre un outil populaire, exfiltrer les identifiants de chaque machine qui l'exécute, utiliser ces identifiants pour compromettre le prochain outil. TeamPCP construit une base de données d'identifiants qui s'étend à tout l'écosystème des développeurs, et ils vendent l'accès à quiconque paiera.
Pirate GitHub : Toute l'Histoire de l'Extension VSCode Nx Console par Nrwl qui Fuit 3 800 Secrets
GitHub a confirmé le 20 mai que deux extensions VS Code infectées sur la machine d'un employé ont donné aux attaquants un accès à environ 3 800 dépôts internes. D'abord, une version compromise de Nx Console (2,2 millions d'installations) a récolté des identifiants le 18 mai. Puis une deuxième extension non divulguée a utilisé ces identifiants pour exfiltrer les dépôts. Le groupe de menace TeamPCP vend la quantité à partir de 50 000 $. Cela n'était pas isolé : cela est arrivé en même temps qu'un ver de la chaîne d'approvisionnement qui a forgé des signatures cryptographiques valides sur 639 paquets npm malveillants et une violation du SDK Python de Microsoft sur PyPI.
Mon avis
Sept surfaces de la chaîne d'approvisionnement ont échoué en 48 heures, et un groupe connecte au moins trois d'entre elles. Ce n'est pas une histoire d'une mauvaise extension VS Code. C'est une histoire sur l'effondrement de l'infrastructure de confiance sous la pression adversariale qu'elle n'a jamais été conçue pour supporter. Les badges de provenance ne signifient rien lorsque l'identité de signature est volée. La modération du marché ne signifie rien lorsque le modérateur est aussi la victime. Chaque coche verte de la chaîne d'outils de développement est devenue un leurre. Ce qui rend cela différent de chaque précédent effroi de la chaîne d'approvisionnement est le tempo opérationnel de l'adversaire et les outils qu'ils ont mis en open source. TeamPCP a publié le code entièrement armé du ver Mini Shai-Hulud le 12 mai. Des variantes imitatrices circulent déjà. Trend Micro a suivi au moins sept vagues confirmées depuis mars, chacune visant un paquet avec plus de téléchargements et introduisant un vecteur d'accès plus techniquement sophistiqué. Le ver forge maintenant sa propre provenance cryptographique à l'exécution. Il se propage à travers GitHub Actions, des extensions VS Code, npm et PyPI simultanément. Il saute les systèmes avec une locale russe. Kennedy m'a dit que la bonne configuration sur le papier n'arrête plus ces attaques. Les cadres de conformité auxquels les entreprises se fient sont écrits pour les humains. Les identités des agents n'apparaissent dans aucun catalogue de contrôle que quiconque a rencontré. Les méchants pivotent plus vite que l'industrie de la défense ne peut mettre à jour ses manuels.
Et ensuite ?
Chaque développeur qui avait installé Nx Console le 18 mai entre 12:36 et 12:47 UTC doit tourner tous les identifiants sur leur machine, immédiatement. Cela inclut non seulement les identifiants professionnels mais aussi les tokens GitHub personnels, les clés AWS, les clés SSH, les bases de données de gestion de mots de passe, tout. La plupart ne le feront pas, car la plupart des développeurs ne savent pas qu'ils ont été affectés. Le temps de réponse de 11 minutes de l'équipe Nx signifie que cette brèche n'apparaîtra pas dans la plupart des journaux d'audit de sécurité. Aucun avertissement n'a été déclenché, aucune tentative de connexion suspecte n'a déclenché de surveillance, juste une mise à jour d'extension normale qui a accidentellement contenu un collecteur d'identifiants. L'employé de GitHub qui a été compromis fera face à une pression pour divulguer exactement quelle extension a été infectée en second, et lorsqu'il le fera, chaque équipe de sécurité exécutant cette extension exigera une autopsie complète. Le véritable effet domino se déclenche lorsque le premier acheteur de ces identifiants (non seulement les 3 800 dépôts, mais la base de données d'identifiants complète que TeamPCP a récoltée auprès de tous ceux qui ont installé l'extension infectée) utilise des identifiants de staging ou des schémas d'API internes pour compromettre une entreprise qui n'a pas encore fait le lien. Pendant ce temps, la mise en open source par TeamPCP du ver Mini Shai-Hulud signifie que nous allons voir une explosion cambrienne d'attaques imitant ciblant d'autres extensions et paquets populaires. L'heuristique de détection de Kennedy fonctionnera jusqu'à ce que la prochaine variante modifie ces signatures. Le scénario contrariant que personne ne prend en compte : et si la compromission de Nx Console avait récolté des identifiants de développeurs dans des dizaines de grandes entreprises technologiques, de fournisseurs de cloud et de vendeurs de sécurité, et que GitHub était simplement la première victime dont la brèche est devenue publique? Dans ce scénario, nous assistons à l'acte d'ouverture d'une campagne beaucoup plus vaste, et les identifiants présents dans la base de données de TeamPCP déverrouillent l'infrastructure de l'ensemble de l'industrie.
Ce que l'histoire nous apprend
L'attaque de la chaîne d'approvisionnement SolarWinds de 2020 a compromis environ 18 000 clients via une mise à jour logicielle empoisonnée, conduisant à une réévaluation fondamentale des modèles de confiance dans les logiciels d'entreprise. Cette attaque a pris des mois à être découverte et impliquait un adversaire étatique (attribué au SVR de la Russie) avec des ressources significatives. Ce qui est différent en 2026, c'est le tempo opérationnel et le profil de l'adversaire. TeamPCP est motivé financièrement, pas par l'État, mais ils exécutent des attaques de la chaîne d'approvisionnement à un rythme qui égale ou dépasse les capacités étatiques d'il y a quelques années à peine. La mise en open source de leurs outils représente un franchissement de seuil : les attaques de la chaîne d'approvisionnement ne sont plus l'apanage exclusif des groupes APT (Advanced Persistent Threat) avec des calendriers opérationnels pluriannuels. Elles sont maintenant exécutables par tout acteur menaçant avec une sophistication technique modérée, et les outils se propagent d'eux-mêmes.
Impact sur les marches
Microsoft (MSFT, actuellement environ 425 $, en baisse d'environ 3 % au cours du mois dernier dans un contexte de faiblesse du secteur technologique plus large) fait face à des dommages de réputation en raison d'une brèche qui est restée entièrement dans son propre écosystème. GitHub est une filiale de Microsoft, VS Code est un produit Microsoft, et l'extension malveillante est passée par un marché géré par Microsoft. Cela crée une pression à l'échelle du conseil pour réviser la sécurité du marché, ce qui signifie probablement une friction accrue dans l'écosystème des extensions et potentiellement une vélocité des fonctionnalités plus lente. C'est un frein à moyen terme sur la position concurrentielle de VS Code contre JetBrains et d'autres IDE (Environnements de Développement Intégré). Plus immédiatement, CrowdStrike (CRWD, à environ 285 $, en hausse d'environ 8 % mois après mois alors que les entreprises augmentent les dépenses de sécurité suite à des brèches médiatisées) et Palo Alto Networks (PANW, à environ 345 $, en hausse de 6 % ce mois-ci) devraient bénéficier alors que les entreprises réévaluent la sécurité des terminaux et la gestion des risques de la chaîne d'approvisionnement. Attendez-vous à un mouvement haussier à court terme pour les deux alors que les équipes d'approvisionnement accélèrent les évaluations des fournisseurs. La brèche de GitHub valide spécifiquement la thèse derrière les fournisseurs d'architecture à confiance zéro, chaque identifiant et jeton dans ces 3 800 dépôts doit désormais être traité comme compromis, ce qui augmente la demande pour des solutions qui supposent une violation et appliquent un accès de moindre privilège à l'exécution. Cloudflare (NET, à environ 95 $, relativement stable ce mois-ci) et Okta (OKTA, à environ 78 $, en baisse de 4 % en raison de préoccupations de rentabilité) pourraient voir une demande accrue pour des solutions de gestion d'identité et d'accès qui limitent le rayon d'explosion lorsque des identifiants fuient.