Des versions malveillantes de Nx et de certains plugins pris en charge ont été diffusées
(github.com/nrwl)- Des versions malveillantes des packages et plugins Nx ont été publiées sur npm, ont scanné le système de fichiers, collecté des identifiants, puis les ont envoyés vers un dépôt du compte Github de l’utilisateur
- Pour vérifier si vous êtes concerné, il faut confirmer si un dépôt s1ngularity-repository a été créé sur votre compte Github
- En cas d’infection, il est impératif de remplacer les tokens et mots de passe, supprimer le dépôt malveillant et vérifier les fichiers de configuration du shell
- Les versions malveillantes affectaient le système via un script postinstall ; le risque d’exécution involontaire augmentait notamment lors de l’utilisation du plugin VSCode Nx Console
- L’équipe Nx a mis en place des mesures supplémentaires de sécurité et de prévention de récidive, et les versions concernées ont été supprimées de npm
Vue d’ensemble et résumé
- Cette alerte de sécurité concerne une grave attaque de la chaîne d’approvisionnement visant les packages Nx et certains plugins associés, avec diffusion de code malveillant via npm
- Les versions malveillantes scannaient le système de fichiers des utilisateurs pour collecter des informations d’authentification, des chemins et d’autres données, puis les téléversaient vers un dépôt Github (
s1ngularity-repository) - Le script
postinstallmalveillant modifiait également les fichiers de configuration du shell de l’utilisateur (.zshrc,.bashrc) pour y ajouter une commande d’arrêt du système - Le vecteur d’attaque, le déroulement de l’attaque, les versions affectées, les actions immédiates à entreprendre et les mesures de prévention sont détaillés
Mesures d’urgence
Vérifications que tout le monde doit effectuer
- Vérifier dans la liste des dépôts de votre compte Github si
s1ngularity-repositorya été créé - Télécharger les fichiers contenus dans ce dépôt afin de les conserver comme archive
- Supprimer le dépôt de Github
- Envoyer un e-mail à
security@nrwl.iopour recevoir les instructions de déchiffrement des informations compromises - Remplacer immédiatement tous les identifiants et tokens de tous les comptes
Comment remplacer le token Github
- Se rendre sur https://github.com/settings/connections/…
- Révoquer les autorisations de l’application connectée afin d’invalider le token existant
- Si vous utilisez la CLI
gh, vous réauthentifier pour générer un nouveau token - Sans action de votre part, l’ancien token risque d’être exploité
Cesser d’utiliser les versions malveillantes de Nx et nettoyer l’environnement
- Vérifier si la version de Nx actuellement utilisée fait partie des versions malveillantes avec la commande
npm ls nx - Si c’est une version infectée, mettre à jour avec
npm uninstall nx && npm install nx@latest - Nettoyer le cache avec
npm cache clean --force
Utilisateurs déjà infectés
- Remplacer les tokens npm et Github
- Réinitialiser tous les mots de passe et identifiants de Github et des services associés
- Vérifier si des commandes inconnues ont été insérées dans les fichiers
.zshrcet.bashrc, puis les supprimer
Si vous administrez un dépôt interne de packages
- Supprimer immédiatement les versions malveillantes du proxy dans le registry interne afin d’empêcher toute propagation supplémentaire
Versions affectées
Package Nx
- 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
- Supprimées de npm à 10:44 PM EDT
@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud
- Supprimés de npm aux horaires de 10:44 PM et 6:20 AM EDT
Détails du vecteur d’attaque
Cause du workflow vulnérable
- Une vulnérabilité permettant l’exécution de code arbitraire a été introduite dans un workflow Github Actions
- En insérant un certain code bash dans le titre d’une PR, il était possible de faire exécuter des commandes système par le workflow : une vulnérabilité de type Bash Injection
- Le déclencheur
pull_request_targetdonnait des privilèges élevés (GITHUB_TOKEN, etc.), ce qui a facilité l’exploitation - Jusqu’à sa suppression, le workflow vulnérable est resté présent sur une ancienne branche autre que
main, ce qui a permis à l’attaquant d’exécuter le workflow via une PR malveillante et de dérober des secrets
Processus de vol du token npm
- Le workflow vulnérable a été utilisé pour déclencher
publish.yml publish.ymlstockait le token npm dans Github Secrets, et ce token a été transmis à un webhook externe pendant le processus- L’attaquant a finalement utilisé ce token pour téléverser sur npm des versions malveillantes de Nx et de packages pris en charge
Comportement du package malveillant
Collecte d’informations, y compris d’identifiants, et publication dans un dépôt Github
- Lors de l’exécution du script
postinstalldu package Nx infecté, l’emplacement de divers fichiers texte et des informations d’identification étaient collectés - Ces données étaient encodées en base64 puis téléversées dans un dépôt Github nommé
s1ngularity-repository - Même si le dépôt a depuis été supprimé, il a été public auparavant ; il faut donc considérer qu’une fuite d’informations a pu se produire
Altération des profils shell (.zshrc, .bashrc)
postinstallinsérait la commandesudo shutdown -h 0, pouvant provoquer l’arrêt du système à l’ouverture d’un terminal et exposer potentiellement le mot de passe
Différents scénarios dans lesquels postinstall peut s’exécuter
-
Au-delà d’une exécution explicite de
npm install/yarn/pnpm install, cela peut aussi se produire via des dépendances transitives, des extensions d’éditeur ou l’exécution de scripts -
En particulier, l’extension Nx Console pour VSCode (versions 18.6.30 à 18.65.1) installait automatiquement
nx@latestau lancement de l’éditeur, ce qui pouvait déclencher l’exécution depostinstall -
Il faut garder à l’esprit que des modules NPM peuvent être installés à divers endroits, même sans intention explicite
-
À partir de Nx Console 18.66.0, l’installation de
latest nxa été supprimée
Chronologie de l’attaque et de la réponse
21 août
- 4:31 PM : fusion d’une PR contenant la vulnérabilité d’injection Bash
- 10:48 PM : publication sur X (anciennement Twitter) d’un message signalant la vulnérabilité
22 août
- Après-midi : enquête interne et rollback du workflow vulnérable (incomplet)
- Mise en place de CodeQL pour détecter à l’avenir des vulnérabilités similaires dans les PR
24 août
- Apparition d’un commit dans le fork de l’attaquant laissant penser à une fuite du token npm
- Création puis suppression d’une PR malveillante, avec exécution de
publish.ymlpar cette PR
26 au 27 août (diffusion des versions malveillantes, réponse)
- Publication successive sur npm de nombreuses versions malveillantes de Nx et de plugins
- Signalements d’incidents à Github et à la communauté NPM
- 10:44 PM : mesures prises par NPM, dont la suppression de l’ensemble des versions concernées
- 11:57 PM : invalidation de tous les tokens de publication des packages liés à Nx
- 27 août : correctif de Nx Console, activation de la 2FA, migration vers le mode Trusted Publisher et autres mesures complémentaires
Mesures préventives et réponse ultérieure
- 2FA rendue obligatoire pour tous les mainteneurs de l’organisation
nrwl - Adoption du mécanisme Trusted Publisher. Déploiement via token npm interdit
- Les futurs packages seront publiés uniquement après vérification via 2FA et mécanismes de confiance
- Détection de risques supplémentaires, validation des PR et protections de branches appliquées par étapes
Enseignements et plan à venir
- Cet incident rappelle l’importance, au niveau local comme international, de la sécurité de la chaîne d’approvisionnement, des pipelines CI/CD et de la réduction des privilèges des workflows
- Après un réexamen interne, l’équipe prévoit de partager avec la communauté les enseignements tirés
Contact
- Contact possible via
security@nrwl.io
Références et annexe
- Principales issues Github, chronologie et posts associés
- Exemple du script
telemetry.jsprésent dans les packages infectés - Ce script collecte les chemins des principaux fichiers texte du système de fichiers dans le but de constituer un inventaire
Résumé de conclusion
- Il est important d’appliquer les dernières mises à jour et correctifs de Nx et des plugins associés
- Le remplacement immédiat des principales informations d’authentification, notamment sur npm et Github, est recommandé
- Cet incident montre qu’une gestion insuffisante de la sécurité de la chaîne d’approvisionnement et des autorisations de workflow peut conduire à un accident majeur
Aucun commentaire pour le moment.