Skip to main content

Compromission massive zero-day de packages npm – Attaque de la chaîne d’approvisionnement Shai-Hulud

Écrit par
feature open source

15 septembre 2025

0 minutes de lecture

Cet incident est en cours. Des mises à jour seront publiées à mesure que de nouvelles informations seront confirmées.

Découvrez si cette attaque vous a affecté grâce au rapport Zero Day présenté par Snyk.

Shai-Hulud NPM Attack: Remediation with Snyk

En bref (17 septembre 2025)

L’attaque, qui a débuté aux alentours du 15 septembre 2025 et a été baptisée « Shai-Hulud », est désormais connue comme un malware de type ver qui se propage par le biais de centaines de packages npm compromis. Elle vise à voler et à exfiltrer les identifiants cloud, les clés d’API et d’autres secrets stockés sur les disques, en les transmettant via un webhook et des dépôts GitHub publics. Elle cible également les environnements CI/CD et s’appuie sur GitHub Actions pour exfiltrer les données et maintenir l’attaque.

Mise à jour (16 septembre 2025)

L’équipe de recherche en sécurité de Snyk est au courant de cette attaque de la chaîne d’approvisionnement en cours et enquête activement sur les menaces et les risques liés à cette campagne étendue de compromission de packages npm, les analyse et les recense. Nous vous recommandons de consulter les résultats des produits Snyk, qui constituent une ressource à jour.

Mise à jour initiale (15 septembre 2025)

Le 15 septembre 2025, plusieurs versions malveillantes des packages npm ngx-bootstrap et ng2-file-upload ont été publiées, puis rapidement retirées. Ces versions intégraient un postinstall script (bundle.js) qui tentait de récupérer les jetons des développeurs (p. ex. npm, GitHub et les identifiants cloud) et d’exfiltrer des secrets. Considérez tout système ayant installé ces versions comme entièrement compromis : supprimez le package, renouvelez tous les secrets depuis une machine distincte et fiable, puis recherchez tout signe de déplacement latéral. GitHub a publié un avis de sécurité sur les malwares pour ngx-bootstrap et ng2-file-upload ; aucune version corrigée n’existe pour les versions altérées, car elles ont été supprimées.

Depuis les premières découvertes concernant ngx-bootstrap, des signes de présence de malware ont également été relevés dans le package npm @ctrl/tinycolor, téléchargé plus de 2 millions de fois par semaine, ainsi que dans d’autres packages npm compromis sous les espaces de noms @ctrl et @nativescript-community, et dans d’autres packages isolés.

Qu’est-ce que ngx-bootstrap et pourquoi est-ce important ?

ngx-bootstrap est une bibliothèque populaire de composants Angular qui adapte les composants d’interface utilisateur Bootstrap aux applications Angular. Elle est largement utilisée dans les projets front-end, les builds CI et les postes de travail des développeurs. Un script d’installation malveillant peut donc s’exécuter lors d’un npm install habituel et accéder aux machines des développeurs et à leurs identifiants locaux. Le dépôt officiel est géré par Valor Software.

Ce que nous savons à ce stade

Des centaines de packages sont probablement concernés

L’attaque s’est étendue à d’autres packages que ngx-bootstrap et @ctrl/tinycolor. Elle touche aussi des espaces de noms d’organisations supplémentaires, notamment des packages de l’entreprise de cybersécurité CrowdStrike sous l’espace de noms npm @crowdstrike, ainsi que d’autres packages.

La liste ci-dessous n’est pas exhaustive : elle sert de référence. Nous vous recommandons de toujours consulter les produits Snyk, les résultats d’analyse et les rapports pour obtenir une liste complète et à jour de tous les packages et versions malveillants.

Retrouvez une liste plus complète des packages concernés sur notre page dédiée aux packages compromis de la base de données des vulnérabilités.

Package ngx-bootstrap et versions concernés

Selon les signalements de la communauté, les versions suivantes de ngx-bootstrap contenaient le hook malveillant postinstall qui appelait bundle.js :

  • 20.0.4, 20.0.5, 20.0.6

  • 19.0.3

  • 18.1.4

Par ailleurs, 20.0.3 aurait contenu bundle.js, mais sans déclaration postinstall. Le même signalement indique que les versions concernées ont été retirées de npm peu après leur découverte.

Remarque : au moment de la rédaction, la page du package npm n’affiche que les versions actuelles non concernées ; les versions malveillantes ont été dépubliées.

La communauté a également signalé que ng2-file-upload semblait concerné, mais les informations restent limitées. Surveillez les arbres de dépendances qui incluent des packages Valor Software et vérifiez les versions installées.

Chronologie (UTC)

  • 2025-09-15 — Un signalement de la communauté est publié sur valor-software/ngx-bootstrap. Il identifie un postinstall/bundle.js malveillant dans de nouvelles versions, signale des tentatives d’exfiltration de jetons et indique que les versions concernées ont été retirées de npm.

  • 2025-09-15 — La base de données des avis de sécurité GitHub publie GHSA-6m4g-vm7c-f8w6 pour ngx-bootstrap (« Malware »), et recommande de considérer comme compromis tout hôte sur lequel le package a été installé.

(Nous publierons des mises à jour à mesure que les responsables et les registres confirmeront de nouveaux faits.)

Évaluation de l’impact

  • Qui est concerné ? Les développeurs, les agents CI et les terminaux qui ont installé l’une des versions répertoriées, ou l’ont récupérée via des dépendances transitives pendant sa période de disponibilité.

  • Quelles données pourraient être exposées ? Les secrets et jetons des environnements de développement (npm, GitHub) et, potentiellement, les identifiants cloud (AWS/GCP/etc.), selon le comportement décrit dans bundle.js.

  • Un indicateur de compromission (IoC) est également associé à un nouveau workflow GitHub Actions nommé shai-hulud, créé par le malware.

  • Gravité : Critique (exécution de code malveillant à l’installation ; vol et exfiltration d’identifiants). L’avis de sécurité de GitHub recommande explicitement une procédure complète de réponse à incident en cas de compromission.

Comment détecter un malware npm zero-day avec Snyk ?

Snyk propose un rapport Zero-Day dans le tableau de bord de l’application Snyk, intitulé « Attaque de la chaîne d’approvisionnement npm Shai-Hulud - septembre 2025 ».

Si vous avez un forfait Enterprise, vous pouvez utiliser cette vue pour filtrer le rapport et sélectionner le zero-day pertinent pour cette attaque de malware npm, ou les CVE que vous souhaitez suivre. Vous obtenez ainsi une vue de l’impact à l’échelle du système pour tinycolor, ngx-bootstrap ou d’autres dépendances dans vos applications et dépôts de code surveillés.

Un menu déroulant intitulé « Vulnérabilité zero-day » est ouvert et affiche une liste de vulnérabilités. L’une d’elles, « Attaque de la chaîne d’approvisionnement npm Shai-Hulud – sept. 2025 », est cochée.

Guide de détection et de triage

  1. Détecter rapidement toute exposition

    • Vérifiez si votre environnement a récupéré des versions concernées :

      • npm ls ngx-bootstrap (par projet)

      • Examinez les fichiers de verrouillage (package-lock.json, pnpm-lock.yaml, yarn.lock) pour repérer ngx-bootstrap@18.1.4, 19.0.3, 20.0.4–20.0.6, et notez toute installation effectuée le ou après le 15 septembre 2025.

    • Examinez node_modules/ngx-bootstrap/package.json pour repérer une entrée postinstall, et recherchez un fichier bundle.js à la racine du package si vous gérez des archives ou caches de fournisseurs.

  2. Interrompre l’exécution des scripts pendant la réponse à l’incident

    • Réinstallez sans exécuter les scripts afin d’empêcher l’exécution des hooks de cycle de vie restants :

      • npm ci --ignore-scripts ou npm install --ignore-scripts

      • Vous pouvez également définir ignore-scripts=true dans .npmrc

  3. Vérifications forensiques

    • Examinez les connexions sortantes des agents de build et des machines de développement pendant les périodes d’installation.

    • Recherchez des anomalies dans GitHub (listes de jetons d’accès, journaux de sécurité récents), les jetons npm et l’utilisation des identifiants des fournisseurs cloud. Vérifiez également GitHub Actions.

    • Conformément aux recommandations de l’avis de sécurité de GitHub, considérez comme compromis tout hôte sur lequel une version concernée a été installée.

Confinement et correction immédiats

  1. Supprimer les versions concernées

    • Supprimez node_modules et les fichiers de verrouillage qui référencent des versions malveillantes, puis réinstallez des versions connues comme fiables et explicitement épinglées.

    • Videz les registres privés, les caches et les artefacts susceptibles de contenir encore les archives tar malveillantes.

  2. Renouveler les secrets depuis une machine saine

    • GitHub : révoquez les jetons d’accès personnels et les clés SSH, renouvelez les jetons à granularité fine et vérifiez les autorisations des applications OAuth et des appareils.

    • npm : révoquez les jetons de registre.

    • Clouds (AWS/GCP/etc.) : renouvelez les clés d’accès et celles des comptes de service, et invalidez les identifiants à longue durée de vie.

  3. Reconstruire et redéployer

    • Après le renouvellement des secrets, reconstruisez vos applications dans des environnements sains, en désactivant d’abord les scripts de cycle de vie, puis réactivez-les si nécessaire.

  4. Communications aux utilisateurs et aux locataires

    • Si vous distribuez des logiciels compilés pendant la période concernée, informez les utilisateurs en aval et recommandez une mise à niveau ou une nouvelle compilation.

À propos des attaques contre la chaîne d’approvisionnement

Cet incident s’ajoute à plusieurs autres incidents de sécurité récents du même type. Nous avons déjà observé des attaques ciblant des environnements CI et des comptes de responsables de packages, qui ont permis de détourner des publications :

Sécurisez votre chaîne d’approvisionnement avec Snyk

87 % des personnes interrogées ont été touchées par des problèmes de sécurité de la chaîne d’approvisionnement. Protégez la vôtre avec Snyk.