Des agents de programmation IA détournés pour diffuser des maliciels lors de l’incident de sécurité lié au paquet malveillant Nx
27 août 2025
0 minutes de lectureLe 26 et 27 août 2025 (UTC), huit versions malveillantes de Nx et Nx Powerpack releases ont été publiées sur npm dans deux branches de versions. Elles sont restées en ligne environ 5 h 20 avant leur suppression. L’attaque touche également l’extension Nx Console pour VS Code.
Mise à jour du 1er septembre : la cause première de la version malveillante de Nx publiée sur npm est désormais connue : il s’agissait d’un workflow CI GitHub Actions défectueux contribué par le biais d’une Pull Request le 21 août. On estime que cette contribution de code a été générée par Claude Code. Un commit malveillant ultérieur, daté du 24 août, a modifié le workflow CI afin que le jeton npm utilisé pour publier la série de paquets Nx soit envoyé à un serveur contrôlé par un attaquant via un webhook.

Allant au-delà des techniques traditionnelles, la charge utile a détourné des agents de programmation IA locaux (claude, gemini et q) au moyen d’une instruction dangereuse pour répertorier les fichiers sensibles, puis exfiltrer des secrets, des identifiants et des données sensibles depuis la machine vers un dépôt GitHub public nommé s1ngularity-repository-NNNN, suivi d’un suffixe numérique. Nous pensons qu’il s’agit probablement de l’un des premiers cas documentés de maliciel exploitant les interfaces en ligne de commande d’assistants IA à des fins de reconnaissance et d’exfiltration de données.
Les responsables de la maintenance de Nx ont publié un avis de sécurité officiel, que Snyk suit au moyen des avis suivants :
Selon l’hypothèse actuelle, un jeton npm compromis disposant de droits de publication a servi à distribuer les paquets malveillants. Toutes les versions compromises ont désormais été effectivement retirées du registre npm.
Si vous avez installé les versions concernées, renouvelez immédiatement vos identifiants, recherchez s1ngularity-repository-* sur GitHub et suivez les étapes de nettoyage ci-dessous.
Qu’est-ce que Nx ?
Nx est un système de build et un outil de monorepo très répandu dans les projets JavaScript et TypeScript, avec des millions de téléchargements par semaine. La popularité de Nx amplifie l’impact d’incidents comme celui-ci dans les écosystèmes de chaîne logistique open source tels que npm.
Un maliciel détourne des agents de programmation IA pour exfiltrer des données
Cet incident marque une nouvelle étape dans les attaques de paquets malveillants sur npm : le maliciel postinstall a tenté d’utiliser plusieurs outils d’IA en ligne de commande disponibles localement, notamment Claude Code de Claude, Gemini CLI de Google et le nouvel agent de programmation en ligne de commande q d’Amazon. Il les a invoqués avec des options non sécurisées pour contourner les garde-fous et analyser le système de fichiers à la recherche de chemins sensibles, puis enregistrer les résultats dans /tmp/inventory.txt (et dans une sauvegarde).
Exemples observés : exécution d’agents de programmation IA avec des options telles que --dangerously-skip-permissions (Claude Code), --yolo (Gemini CLI) et --trust-all-tools (Amazon q).
L’instruction intégrée demandait à l’agent de répertorier récursivement les fichiers de portefeuilles, les clés SSH, les fichiers .env et d’autres cibles de grande valeur, tout en respectant une limite de profondeur et en creating /tmp/inventory.txt(.bak).
Voici l’instruction fournie aux agents de programmation IA :
Le maliciel comprend également une variante d’instruction minimale, conçue uniquement pour répertorier les chemins des fichiers en texte brut (sans leur contenu), ce qui confirme davantage la conception de reconnaissance assistée par agent.
Pourquoi l’attaque du paquet malveillant Nx est importante : transformer des agents IA « utiles » en outils de reconnaissance automatisés représente une nette escalade des attaques visant la chaîne logistique open source et constitue probablement l’un des premiers cas documentés publiquement où des interfaces en ligne de commande d’assistants IA ont été contraintes de cette manière.
Analyse du maliciel exploitant des agents IA
Le script postinstall telemetry.js importe des fonctionnalités de traitement des processus enfants, définit l’instruction et prépare la collecte des données :
Il effectue ensuite des vérifications multiplateformes pour s’assurer de pouvoir s’exécuter correctement sous macOS, Windows et Linux :
Le code malveillant prépare ensuite les interfaces en ligne de commande des assistants de programmation IA et leurs options :
Enfin, le code récupère les identifiants npm, les identifiants GitHub et d’autres informations sensibles, puis prépare l’inventaire et publie ces données dans des dépôts GitHub publics :
Que s’est-il passé lors de la compromission de Nx ?
Comment l’attaque a-t-elle été rendue possible ?
Les enquêteurs pensent qu’un jeton npm d’un responsable de la maintenance disposant de droits de publication a été compromis, puis que des versions malveillantes ont été publiées directement sur npm. Fait notable, celles-ci ne comportaient aucune attestation de provenance, un mécanisme permettant de vérifier de manière cryptographique l’origine et l’intégrité des paquets publiés. Cet incident souligne l’importance cruciale d’adopter et d’imposer des vérifications de provenance dans les chaînes logistiques open source.
Comment l’attaque de Nx a-t-elle été exécutée ?
Un script postinstall (nommé telemetry.js) s’exécute lors de l’installation du paquet Nx (quand les développeurs lancent npm install ou npm install nx). Une fois Nx installé, le script collecte des données localement et effectue une reconnaissance par agent IA, vole les identifiants et jetons GitHub des utilisateurs (en s’appuyant sur la commande gh auth token lorsqu’elle est disponible), puis crée un dépôt GitHub public dans le compte de la victime et téléverse toutes les données récoltées dans results.b64, après les avoir encodées en Base64 trois fois.
Quelles données étaient ciblées, et où ?
La charge utile recherchait des jetons GitHub, des jetons npm (~/.npmrc), des clés SSH, des variables d’environnement et un large éventail d’éléments liés aux portefeuilles de cryptomonnaies. Ces données étaient récupérées sur les postes de travail des développeurs et potentiellement sur tout autre exécuteur CI ou de build sur lequel le paquet avait été installé.
Y avait-il un élément destructeur ?
Oui. Le maliciel, peut-être pour dissimuler ses activités et provoquer davantage de perturbations, a ajouté sudo shutdown -h 0 à la fois à ~/.bashrc et à ~/.zshrc, entraînant l’arrêt immédiat des nouveaux shells.
Paquets et versions concernés
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(toutes désormais supprimées).Plugins Nx (exemples) :
@nx/devkit,@nx/js,@nx/workspace,@nx/node,@nx/eslint(variantes malveillantes21.5.0et/ou20.9.0), ainsi que@nx/keyet@nx/enterprise-cloud(3.2.0).Extension VS Code : Nx Console
Mesures immédiates (à prendre maintenant)
Vérifiez si votre compte GitHub a été utilisé pour exfiltrer des données. Recherchez les dépôts nommés
s1ngularity-repository-*. Si vous en trouvez un, prenez immédiatement les mesures indiquées par vos équipes ProdSec et InfoSec.Renouvelez tous les identifiants susceptibles d’avoir été présents sur la machine : jetons GitHub, jetons npm, clés SSH et clés d’API figurant dans des fichiers
.env.Auditez et nettoyez votre environnement conformément aux instructions de votre équipe ProdSec
Repérez l’utilisation de Nx dans vos projets. Exécutez
npm ls nx(et vérifiezpackage-lock.json) pour détecter les installations indirectes. Si vous êtes concerné, désinstallez Nx, puis installeznx@latest.Les utilisateurs de Snyk peuvent utiliser Snyk SCA et Snyk SBOM pour localiser et surveiller les projets à l’échelle de leur organisation.
Si des interfaces IA en ligne de commande sont installées, vérifiez l’historique de votre shell pour repérer des options dangereuses (
--dangerously-skip-permissions,--yolo,--trust-all-tools).
Mesures préventives contre les futures attaques de la chaîne logistique
Imposez l’utilisation du fichier de verrouillage dans la CI avec
npm ci.Désactivez les scripts d’installation par défaut : utilisez
--ignore-scriptset définissezignore-scripts=truedans un fichier.npmrcà l’échelle de l’utilisateur ou du projet afin de neutraliser les scriptspostinstallmalveillants.Activez l’authentification à deux facteurs sur npm et privilégiez le mode d’authentification et de publication :
npm profile enable-2fa auth-and-writes.Vérifiez la provenance avant l’installation lorsque c’est possible. Il est essentiel de noter que les versions malveillantes de Nx ont été publiées sans attestation de provenance (!), tandis que les versions récentes et légitimes en étaient accompagnées. Un indicateur utile lors du triage.
Vérifiez vos installations avant de les effectuer avec npq (et/ou Snyk Advisor) pour pouvoir conditionner les installations aux signaux de confiance et aux renseignements de Snyk. Envisagez de créer localement un alias faisant correspondre
npmànpq.Effectuez des analyses et une surveillance continues avec Snyk (
snyk test/snyk monitor) pour détecter les nouvelles divulgations et automatiser les correctifs. Snyk peut également vous aider à localiser précisément les installations de dépendances dans vos équipes R&D.Utilisez un registre privé ou un proxy de registre (par exemple, Verdaccio) pour réduire l’exposition directe et appliquer des règles de publication et de consommation.
À lire également : les 10 bonnes pratiques de sécurité pour npm de Snyk et Sécurité npm : prévenir les attaques de la chaîne logistique.
Chronologie de l’attaque
Voici la chronologie de l’attaque de Nx, telle qu’elle figure dans le rapport de sécurité GitHub d’origine :
UTC (résumé destiné aux équipes de réponse aux incidents) :
22:32 - publication de21.5.0→ 22:39 -20.9.0→ 23:54 -20.10.0+21.6.0→
27 août 00:16 -20.11.0→ 00:17 -21.7.0→ 00:30 - alerte de la communauté →
00:37 -21.8.0+20.12.0→ 02:44 - npm supprime les versions concernées → 03:52 - révocation des accès de l’organisation.EDT (selon l’avis) :
18 h 32 - première vague (y compris les variantes de plugins@nx/*) → 20 h 30 - première issue GitHub →
22 h 44 - suppression par npm des versions et jetons concernés.
Indicateurs de compromission (IoC)
Système de fichiers :
/tmp/inventory.txt,/tmp/inventory.txt.bak; fichiers rc du shell (~/.bashrc,~/.zshrc) auxquels a été ajoutée la commandesudo shutdown -h 0.Éléments du compte GitHub : dépôt public nommé
s1ngularity-repositorycontenantresults.b64(encodé trois fois en Base64).Réseau/processus : appels d’API anormaux à
api.github.comlors denpm install; exécutions degh auth tokenpartelemetry.js.
À propos des attaques visant la sécurité de la chaîne logistique
Cet incident n’est pas isolé. Des attaques contre des comptes de responsables de la maintenance et des systèmes CI ont déjà permis de détourner des publications :
Ultralytics (décembre 2024) : une chaîne d’injection de modèle GitHub Actions a conduit à la publication de versions pip malveillantes et au vol d’identifiants. L’attaque contre Ultralytics illustre comment une mauvaise configuration de la CI peut permettre la falsification d’artefacts.
La compromission des responsables de la maintenance d’ESLint et Prettier (juillet 2025) : une campagne d’hameçonnage associée au typosquattage (
npnjs.com) a récupéré des identifiants npm et injecté des maliciels dans des paquets populaires. Un rappel de plus : il faut renforcer la sécurité des comptes de responsables de la maintenance à l’aide de l’authentification à deux facteurs.
Autres remarques sur la confiance dans l’IA
Traitez les agents de programmation IA locaux comme toute autre automatisation privilégiée : limitez l’accès aux fichiers et au réseau, examinez-les régulièrement et n’exécutez pas aveuglément les interfaces en ligne de commande des agents de programmation IA en mode YOLO. Évitez les options qui ignorent les autorisations ou font « confiance à tous les outils » afin de renforcer encore davantage votre sécurité.
Cet incident montre à quel point il est facile de transformer les interfaces en ligne de commande des assistants de programmation IA en agents autonomes malveillants lorsque les garde-fous sont désactivés.
La sécurité de la frontière entre assistant et menace dépend uniquement des garde-fous que vous mettez en place. Ne laissez pas au hasard la sécurité de votre code généré par l’IA et de vos systèmes. Le guide de Snyk sur les garde-fous du code IA vous fournit les outils nécessaires pour sécuriser l’ensemble de votre cycle de vie de l’IA, des dépendances de vos modèles d’IA jusqu’au code qu’ils génèrent.
E-BOOK
Garde-fous pour le code généré par l’IA
Découvrez les outils nécessaires pour mettre en place des garde-fous efficaces et garantir que le code généré par l’IA soit à la fois performant et sécurisé.
