3 points par GN⁺ 2025-08-29 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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 postinstall malveillant 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

  1. Vérifier dans la liste des dépôts de votre compte Github si s1ngularity-repository a été créé
  2. Télécharger les fichiers contenus dans ce dépôt afin de les conserver comme archive
  3. Supprimer le dépôt de Github
  4. Envoyer un e-mail à security@nrwl.io pour recevoir les instructions de déchiffrement des informations compromises
  5. 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 .zshrc et .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_target donnait 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.yml stockait 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 postinstall du 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)

  • postinstall insérait la commande sudo 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@latest au lancement de l’éditeur, ce qui pouvait déclencher l’exécution de postinstall

  • 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 nx a é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.yml par 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.js pré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.

Aucun commentaire pour le moment.