top of page
Rechercher

Attaque NPM Shai-Hulud : Analyse d'une campagne impliquant des mécanismes de réplication

  • Photo du rédacteur: Loïc Castel
    Loïc Castel
  • il y a 2 jours
  • 5 min de lecture

Sommaire


Shai-Hulud, c'est pas le ver des sables dans Dune ?

Tout d’abord, cet article n’est pas une seconde version de notre article de blog (https://www.safercy.com/post/la-plus-grande-attaque-de-supply-chain-de-l-histoire-javascript) de la semaine dernière mais concerne bien une autre attaque séparée, qui fonctionne sur le même principe, certes, mais qui a un impact bien différent. En revanche, l'impact de l'attaque Shai-Hulud est très proche de l'attaque S1ngularity, documentée ici : https://www.safercy.com/post/s1ngularity-une-attaque-bien-singuli%C3%A8re


L'écosystème NPM a été la cible d'une attaque d'approvisionnement majeure découverte le 15 septembre 2025. Cette campagne, baptisée "Shai-Hulud" en référence aux vers des sables de Dune, représente une évolution dangereuse des menaces sur la chaîne d'approvisionnement logicielle. Contrairement aux attaques NPM mentionnées plus haut, le malware injecté présente des capacités d'auto-propagation similaires à celles d'un ver informatique, lui permettant de se répandre automatiquement à travers l'écosystème JavaScript.


L'attaque a initialement été détectée lors de la compromission du package populaire @ctrl/tinycolor, qui cumule plus de 2,2 millions de téléchargements hebdomadaires. Cependant, l'ampleur réelle de cette campagne s'est rapidement révélée beaucoup plus importante, touchant par effet de rebond plus de 180 packages différents appartenant à de multiples mainteneurs.


Impact

Packages NPM compromis

L'attaque Shai-Hulud a infecté un nombre considérable de packages NPM populaires. Parmi les packages les plus notables compromis figurent :


Packages majeurs touchés :


  • @ctrl/tinycolor (2,2 millions de téléchargements hebdomadaires) - versions 4.1.1 et 4.1.2

  • ngx-bootstrap (300k téléchargements hebdomadaires)

  • ng2-file-upload (100k téléchargements hebdomadaires)

  • angulartics2 (version 14.1.2)


Organisations impactées :


  • CrowdStrike : 9 packages NPM compromis

    • Crowdstrike a déjà investigué cet incident, qui ne se révèle pas impactant pour leurs clients. Voici leur communiqué :

After detecting several malicious Node Package Manager (NPM) packages in the public NPM registry, a third-party open source repository, we swiftly removed them and proactively rotated our keys in public registries. These packages are not used in the Falcon sensor, the platform is not impacted and customers remain protected. We are working with NPM and conducting a thorough investigation.
  • NativeScript : Plusieurs packages de la communauté @nativescript-community

  • Multiples packages de l'espace de noms @ctrl/ incluant @ctrl/deluge, @ctrl/golang-template, et @ctrl/magnet-link

Actions malveillantes réalisées

Le malware Shai-Hulud exécute plusieurs actions critiques une fois déployé :


  1. Vol et exfiltration de secrets : Extraction des tokens NPM, GitHub, AWS, GCP et Azure depuis les variables d'environnement et les endpoints de métadonnées cloud

  2. Création de repositories publics : Publication automatique d'un repository GitHub public nommé "Shai-Hulud" contenant les secrets volés encodés en JSON

  3. Injection de workflows malveillants : Déploiement du fichier .github/workflows/shai-hulud-workflow.yml pour maintenir la persistance et exfiltrer les secrets des repositories

  4. Propagation automatique : Utilisation des tokens NPM découverts pour republier automatiquement d'autres packages avec le code malveillant intégré

  5. Exposition de repositories privés : Transformation de repositories privés en repositories publics ou création de nouvelles branches nommées "shai-hulud"


Github - présence d'une branche Shai-Hulud Migration
Source : Github.com

Au moment de la découverte, environ 200 paquets NPM infectés avaient été identifiés, avec une propagation rapide dans les premières 24 heures avant que les mesures de réponse ne ralentissent la spread.


Fonctionnement du code malveillant

Mécanisme d'exécution initial

Le malware Shai-Hulud s'exécute via un script bundle.js de plus de 3MB intégré dans les packages NPM compromis. Ce script est déclenché automatiquement lors de la phase post-installation des packages via la directive suivante dans le fichier package.json :

{
  "scripts": {
    "postinstall": "node bundle.js"
  }
}

Phase de reconnaissance et collecte

Une fois activé, le malware effectue une reconnaissance complète du système cible :


  1. Scan des variables d'environnement : Recherche spécifique des tokens GITHUB_TOKEN, NPM_TOKEN, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

  2. Utilisation de TruffleHog : Téléchargement et exécution de l'outil légitime TruffleHog (https://github.com/trufflesecurity/trufflehog) pour scanner le système de fichiers à la recherche de plus de 800 types de secrets différents :

trufflehog filesystem . --json --results=verified
  1. Interrogation des endpoints de métadonnées cloud : Extraction des credentials depuis les services IMDS d'AWS, GCP et Azure


Mécanisme de propagation auto-réplicante

La caractéristique la plus dangereuse de Shai-Hulud réside dans sa capacité d'auto-propagation :


  1. Énumération des packages : La fonction getPackagesByMaintainer() récupère la liste des packages maintenus par l'utilisateur compromis et les trie par nombre de téléchargements mensuels

  2. Modification automatique : La fonction updatePackage() télécharge le package cible, modifie le package.json pour ajouter le script postinstall, injecte le fichier bundle.js malveillant, et republie automatiquement le package

  3. Validation des credentials : Vérification de la validité des tokens via les API npm whoami et GitHub user avant leur utilisation


Exfiltration des données

Le malware emploie deux méthodes simultanées pour exfiltrer les données volées :


  1. Repository GitHub public : Création d'un repository "Shai-Hulud" contenant un fichier JSON avec les secrets collectés, les informations système et les variables d'environnement

  2. GitHub Actions malveillant : Injection du workflow .github/workflows/shai-hulud-workflow.yml qui encode les secrets en JSON et les transmet vers le serveur webhook[.]site contrôlé par l'attaquant

    • A noter que la version gratuite du site avait été utilisée, limitée à 100 interactions, et vite bloquée par la plateforme webhook site en raison de l’utilisation excessive


Recommandations

Mesures immédiates de réponse

Audit des comptes GitHub :

  • Vérifier la présence de repositories publics non autorisés, en particulier ceux avec la description "Shai-Hulud Migration"

  • Rechercher les nouvelles branches nommées "shai-hulud" dans vos repositories

  • Examiner les workflows GitHub Actions récemment ajoutés, spécifiquement .github/workflows/shai-hulud-workflow.yml


Nettoyage des packages NPM :

  • Identifier et supprimer immédiatement toutes les versions affectées des packages compromis

  • Purger le cache NPM local et réinstaller tous les packages pour éliminer les dépendances compromises

  • Analyser les logs CI/CD pour identifier les accès suspects à npm publish


Rotation des clés et identifiants

En cas de compromission confirmée, procéder immédiatement à la rotation complète de tous les tokens et clés :

  • Tokens NPM de publication

  • Tokens d'accès personnel GitHub (PAT)

  • Clés d'accès AWS (Access Key ID et Secret Access Key)

  • Credentials de service Google Cloud Platform

  • Tokens d'authentification Azure


Si du code source privé a été passé en public, vérifiez que le code ne contient pas de données d’authentification en dur et, si c’est le cas, renouvelez ces identifiants.


Mesures préventives à long terme

Surveillance et détection :

  • Implémenter une surveillance continue des publications de packages via les API NPM

  • Mettre en place des alertes pour les modifications non planifiées des package.json

  • Utiliser des solutions de sécurité de la chaîne d'approvisionnement comme Falco ou Sysdig Secure pour la détection en temps réel


Durcissement des processus :

  • Implémenter une période d'attente avant l'adoption de nouvelles dépendances pour réduire l'exposition aux attaques fraîches

  • Utiliser des registres NPM privés avec validation des packages

  • Mettre en place l'authentification à deux facteurs (2FA) obligatoire pour tous les comptes NPM et GitHub

  • Effectuer des audits réguliers des dépendances avec des outils comme npm audit ou des solutions tierces


Cette attaque Shai-Hulud marque une escalade significative dans la sophistication des menaces sur l'écosystème JavaScript, démontrant la nécessité d'une vigilance accrue et de mesures de sécurité renforcées pour tous les développeurs utilisant NPM.


Safercy peut vous accompagner et propose les prestations suivantes : 


 
 
bottom of page