Une attaque de grande ampleur contre la chaîne d’approvisionnement logicielle affecte l’écosystème JavaScript après la compromission, par les attaquants, du compte GitHub d’un mainteneur responsable de plusieurs packages npm très utilisés.
L’incident a commencé le 4 août 2026, lorsque du code malveillant a été introduit dans des packages tels que keyv, flat-cache et file-entry-cache, avant de s’étendre rapidement en une vaste campagne Shai-Hulud qui s’est propagée à des centaines d’autres packages.
Selon les chercheurs d’Aikido, les attaquants ont compromis le compte GitHub du mainteneur de keyv, un package totalisant environ 127 millions de téléchargements hebdomadaires.
Ils ont ensuite utilisé GitHub Actions pour publier des mises à jour malveillantes.
Comme les versions provenaient du workflow légitime, les packages compromis ont été publiés sur npm avec une provenance valide, ce qui leur donnait une apparence authentique.
Points clés
- Les attaquants ont détourné le compte d’un mainteneur npm populaire pour lancer l’attaque de la chaîne d’approvisionnement Shai-Hulud.
- La campagne s’est propagée à des centaines de packages totalisant plus de 2 milliards d’installations mensuelles.
- Les packages malveillants utilisaient des scripts preinstall npm pour dérober des identifiants cloud, GitHub, Kubernetes et d’API.
- La provenance valide de GitHub Actions donnait aux versions des packages compromis une apparence légitime.
- Les organisations doivent immédiatement sécuriser leurs pipelines de développement, renouveler les identifiants et renforcer les contrôles de sécurité de la chaîne d’approvisionnement logicielle.
L’attaque Shai-Hulud se propage dans la chaîne d’approvisionnement npm
L’attaque a depuis évolué au-delà d’un seul mainteneur compromis.
Aikido a indiqué que le logiciel malveillant s’était propagé à des packages maintenus par d’autres organisations, affectant des centaines de packages totalisant plus de 2 milliards d’installations mensuelles.
Parmi les packages initialement compromis figuraient :
- keyv
- flat-cache
- file-entry-cache
- cacheable
- cache-manager
- cacheable-request
- @cacheable/node-cache
- @cacheable/memory
- @cacheable/utils
- ecto
Les chercheurs ont également identifié des packages compromis associés à des organisations telles que Deliveroo, OneReach, Picsart et Qlik, illustrant la rapidité avec laquelle l’attaque s’est propagée dans la chaîne d’approvisionnement JavaScript.
Le logiciel malveillant Shai-Hulud utilise des scripts preinstall npm pour dérober des identifiants
Contrairement aux attaques qui obligent les utilisateurs à exécuter manuellement du code malveillant, cette campagne a exploité le hook de cycle de vie preinstall de npm.
Chaque package affecté contenait un nouveau fichier setup.mjs référencé dans le fichier package.json. Lors de l’installation avec npm, le script s’exécutait automatiquement avant la fin de l’installation.
Le dropper a téléchargé l’environnement d’exécution JavaScript Bun avant de lancer une charge utile obfusquée connue sous le nom de Math_Symbol.js, un programme de 728 Ko destiné à dérober des identifiants.
Les chercheurs ont constaté que le logiciel malveillant récupérait des identifiants depuis plusieurs sources, notamment :
- jetons d’authentification npm
- jetons d’accès personnels GitHub et identifiants GitHub Actions
- clés d’accès AWS, identifiants IAM, métadonnées EC2 et Secrets Manager
- jetons de comptes de service Kubernetes et secrets de clusters
- jetons HashiCorp Vault et secrets stockés
- jetons d’API Stripe et Slack
- clés SSH, certificats privés, fichiers d’état Terraform, identifiants Docker, configurations VPN et nombreux fichiers .env
Le logiciel malveillant a chiffré les données collectées avant de les exfiltrer vers un dépôt GitHub public.
Les chercheurs ont également observé un comportement de type ver visant à infecter d’autres packages npm appartenant à des mainteneurs ayant installé des dépendances compromises, permettant à la campagne de se propager rapidement dans tout l’écosystème.
Comment les organisations doivent réagir à l’attaque Shai-Hulud
Les organisations ayant installé ou créé des logiciels à partir de versions de packages affectées doivent partir du principe que les identifiants et les environnements de développement ont pu être exposés, jusqu’à preuve du contraire.
- Identifier et supprimer les versions affectées des packages, y compris les dépendances transitives, des environnements de développement, de build et de CI/CD.
- Renouveler tous les identifiants potentiellement exposés, notamment les jetons npm, GitHub, cloud, Kubernetes, Vault et d’API, et invalider les sessions actives lorsque cela est nécessaire.
- Reconstruire les postes de travail des développeurs et les runners CI/CD affectés à partir d’images fiables, puis rechercher les indicateurs de compromission et toute activité sortante non autorisée.
- Examiner les workflows GitHub Actions, les journaux de build, l’activité de publication des packages et les versions logicielles créées pendant la période d’exposition afin de détecter d’éventuelles modifications non autorisées.
- Renforcer la sécurité de la chaîne d’approvisionnement logicielle avec des outils DevSecOps, l’analyse de composition logicielle (SCA), la surveillance des dépendances, le verrouillage des versions, les listes d’autorisation de packages et des dépôts internes de packages de confiance.
- Imposer une MFA résistante à l’hameçonnage, des clés de sécurité matérielles, un accès doté du moindre privilège et des contrôles renforcés autour des dépôts de code source et des workflows de publication des packages.
- Tester les plans de réponse aux incidents avec des scénarios d’attaque de la chaîne d’approvisionnement logicielle, notamment la compromission de dépendances, le renouvellement des identifiants, la récupération des environnements de développement et la reconstruction sécurisée des logiciels.
Ces mesures peuvent aider les organisations à réduire leur exposition à l’attaque actuelle tout en renforçant la résilience de leur chaîne d’approvisionnement logicielle face aux compromissions futures.
En résumé
Cette campagne rappelle que la sécurité de la chaîne d’approvisionnement logicielle constitue un risque commercial, et pas uniquement un enjeu de développement.
À mesure que les écosystèmes logiciels deviennent de plus en plus interconnectés, la gouvernance, la visibilité et les pratiques de développement sécurisé deviennent des composantes essentielles de la résilience des entreprises.
Pour renforcer la résilience face aux menaces, il faut adopter une approche globale de la sécurité de la chaîne d’approvisionnement logicielle





