- Une attaque de la chaîne d’approvisionnement a touché plus de 40 packages de l’écosystème NPM, dont le populaire @ctrl/tinycolor, avec injection d’un malware auto-propagateur capable d’infecter en cascade les secrets des environnements de développement jusqu’aux identifiants CI/CD. Les versions compromises ont été retirées de npm
- La charge utile exécute de manière asynchrone un bundle Webpack (
bundle.js, ~3.6MB) pendant l’installation npm, puis procède à une collecte étendue d’identifiants via les variables d’environnement, le système de fichiers et les SDK cloud
- La logique malveillante utilise NpmModule.updatePackage pour patcher et republier de force d’autres packages, provoquant une propagation en cascade, et injecte un workflow shai-hulud dans GitHub Actions pour exfiltrer les secrets d’organisation via toJSON(secrets)
- Les données collectées sont exfiltrées via la création du dépôt GitHub public
Shai-Hulud, en se faisant passer pour une activité de développement légitime, ce qui augmente fortement la furtivité
- L’opération agit discrètement en visant les tokens et les points de terminaison de métadonnées de AWS/GCP/Azure/NPM/GitHub, ainsi qu’en recherchant des secrets sur la base de TruffleHog
- Il est demandé de retirer immédiatement les packages, nettoyer les dépôts, remplacer l’ensemble des identifiants, ainsi que de vérifier les journaux CloudTrail/GCP Audit, bloquer les webhooks et mettre en place des politiques de protection de branche / Secret Scanning / cooldown
Packages affectés
- 195 packages/versions au total ont été signalés, notamment @ctrl/tinycolor(4.1.1, 4.1.2), de nombreux packages de l’espace de noms @ctrl/, la famille de modules @crowdstrike/, ainsi que ngx-bootstrap/ngx-toastr/ng2-file-upload/ngx-color à travers l’écosystème Angular/Web UI, la pile mobile @nativescript-community/ et @nstudio/, la toolchain sciences de la vie teselagen/, ainsi que ember-*, koa2-swagger-ui, pm2-gelf-json, wdio-web-reporter
- Pour chaque package, il faut se référer au tableau de l’article source pour les versions exactes et croiser précisément leur présence dans vos projets
- Exemples :
@ctrl/ngx-emoji-mart 9.2.1, 9.2.2, @ctrl/qbittorrent 9.7.1, 9.7.2, ngx-bootstrap 18.1.4, 19.0.3–20.0.5, ng2-file-upload 7.0.2–9.0.1
Actions immédiates requises
Identifier et supprimer les packages compromis
- Vérifier la présence de packages infectés dans le projet :
npm ls @ctrl/tinycolor
- Désinstaller immédiatement les packages compromis :
npm uninstall @ctrl/tinycolor
- Rechercher localement les traces connues via le hash de
bundle.js : sha256sum | grep 46faab8a...
Nettoyer les dépôts infectés
- Supprimer le workflow GitHub Actions malveillant : retirer
.github/workflows/shai-hulud-workflow.yml
- Détecter et supprimer la branche distante
shai-hulud : git ls-remote ... | grep shai-hulud puis git push origin --delete shai-hulud
Faire tourner immédiatement tous les identifiants
- Remplacement complet requis pour les tokens NPM, GitHub PAT / secrets GitHub Actions, clés SSH, identifiants AWS/GCP/Azure, chaînes de connexion DB, tokens tiers et secrets CI/CD
- Rotation complète nécessaire, y compris pour les éléments stockés dans AWS Secrets Manager / GCP Secret Manager
Auditer l’infrastructure cloud pour détecter une compromission
- AWS : dans CloudTrail, vérifier les horaires et motifs d’appels à
BatchGetSecretValue, ListSecrets, GetSecretValue, et contrôler via le IAM Credential Report la création ou l’usage anormal de clés
- GCP : dans les Audit Logs, vérifier les accès à Secret Manager et la présence éventuelle d’événements CreateServiceAccountKey
Aucun commentaire pour le moment.