StepSecurity publie une alerte détaillée sur la compromission du package Nx sur npm fin août 2025, confirmée par l’avis GHSA-cxm3-wv7p-598c, avec un vecteur d’attaque lié à des workflows GitHub vulnérables et une exfiltration de secrets à grande échelle.

🚨 Entre 22:32 UTC le 26/08 et ~03:52 UTC le 27/08, huit versions malveillantes de Nx ont été publiées puis retirées (~5h20 d’attaque). Le malware exécuté en post-install (telemetry.js) a visé des systèmes non-Windows et a exfiltré des secrets (clés SSH, tokens npm/GitHub, .gitconfig, .env, portefeuilles crypto). Fait inédit, il a « instrumenté » des CLIs d’IA (Claude, Gemini, Q) avec des drapeaux permissifs pour lister des chemins sensibles. L’exfiltration publiait un dépôt GitHub public s1ngularity-repository contenant results.b64 (triple base64) via des tokens GitHub volés. Des mécanismes de persistance/sabotage ajoutaient sudo shutdown -h 0 dans ~/.bashrc et ~/.zshrc.

🧪 L’analyse technique décrit: un hook postinstall lançant telemetry.js; collecte d’infos système/ENV; recherche de wallets (MetaMask, Electrum, Ledger/Trezor, Exodus, Phantom, Solflare, etc.); récupération de gh auth token, ~/.npmrc, id_rsa, .env; abus des CLIs d’IA pour inventaire (/tmp/inventory.txt); triple-encodage base64 et upload via l’API GitHub; et append de commandes de shutdown dans les shells. StepSecurity Harden-Runner a détecté des appels réseau anormaux vers api.github.com pendant npm install. Un vecteur additionnel a touché des utilisateurs via l’extension VSCode Nx Console (18.63.x–18.65.x) exécutant npx nx@latest durant la fenêtre de compromission; une version corrigée 18.66.0 est disponible.

🛠️ La cause confirmée remonte à un workflow GitHub vulnérable combinant injection bash (utilisation de pull_request_target avec permissions élevées et GITHUB_TOKEN en écriture). L’attaque a déclenché publish.yml pour exfiltrer le token npm vers un webhook, permettant ensuite la publication des versions malveillantes. Mesures annoncées: retrait des versions par npm, restrictions GitHub sur des dépôts contenant des secrets exfiltrés, puis durcissement des contrôles (2FA obligatoire, désactivation des publications par token, Trusted Publisher).

⚠️ Deuxième vague (28/08 20:00 UTC) basée sur des identifiants GitHub divulgués: renommage et exposition publique de dépôts privés (s1ngularity-repository-{random-string}) et forks dans des comptes compromis; des milliers de dépôts concernés sont observés. Les tokens OAuth du GitHub CLI (longue durée) sont pointés comme particulièrement exposés. Des requêtes GitHub sont fournies pour vérifier l’impact.

• IoCs observés: ~/.bashrc et ~/.zshrc contenant « sudo shutdown -h 0 »; /tmp/inventory.txt (+ .bak); dépôts publics GitHub nommés s1ngularity-repository ou variantes (-0, -1) avec results.b64 (triple base64) ; appels sortants vers api.github.com pour création de dépôts et upload. • TTPs clés: compromission supply chain via npm; hook postinstall; abus de CLIs d’IA avec drapeaux permissifs; exfiltration via dépôts GitHub publics; recherche de wallets crypto; vol de tokens (GitHub, npm), SSH et .env; persistance par sabotage shell; exploitation de GitHub Actions (pull_request_target + injection bash) pour obtenir le token npm; seconde vague d’exposition/forging de dépôts. • Produits/versions affectés (extraits) : Nx (@nx) 20.9.0, 20.10.0, 20.11.0, 20.12.0, 21.5.0, 21.6.0, 21.7.0, 21.8.0 ; @nx/devkit 20.9.0, 21.5.0 ; @nx/eslint 21.5.0 ; @nx/js 20.9.0, 21.5.0 ; @nx/node 20.9.0, 21.5.0 ; @nx/workspace 20.9.0, 21.5.0 ; @nx/enterprise-cloud 3.2.0 ; @nx/key 3.2.0 ; extension VSCode Nx Console 18.63.x–18.65.x (corrigé en 18.66.0).

Il s’agit d’un rapport d’incident et d’une analyse technique visant à documenter l’attaque, ses IoCs/TTPs, la chronologie et les versions affectées.


🔗 Source originale : https://www.stepsecurity.io/blog/supply-chain-security-alert-popular-nx-build-system-package-compromised-with-data-stealing-malware