Aikido

axios compromis sur npm : compte du mainteneur piraté, RAT déployé

Écrit par
Madeline Lawrence

Points clés à retenir

  • Le compte npm du mainteneur principal d'axios a été piraté. Deux versions malveillantes ont été publiées : axios@1.14.1 et axios@0.30.4. npm les a depuis supprimées.
  • Quiconque a installé l'une ou l'autre version avant le retrait doit considérer son système comme compromis. Les versions malveillantes injectent une dépendance (plain-crypto-js) qui déploie un cheval de Troie d'accès à distance (RAT) multiplateforme ciblant macOS, Windows et Linux.
  • axios enregistre environ 100 millions de téléchargements hebdomadaires. Il s'agit de l'une des attaques de la chaîne d’approvisionnement npm les plus impactantes jamais enregistrées.
  • Le malware s'autodétruit après exécution, de sorte que l'inspection post-infection de node_modules ne le révélera pas. Vous devez vérifier vos fichiers de logs.

Un grand merci pour l'excellente couverture de cet incident par :

Comment vérifier si vous êtes affecté par l'attaque axios

Option 1) Vérifier manuellement

1. Vérifier la présence de versions malveillantes d'axios

Analyse vos paquets installés et votre fichier de verrouillage à la recherche de 1.14.1 ou 0.30.4.

npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4"

2. Vérifier la présence du paquet dropper caché

Même si setup.js s'est auto-supprimé, le répertoire existe toujours. Sa seule présence confirme que le dropper a été exécuté.

ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"

3. Vérifier la présence d'artefacts de RAT sur le disque

macOS

ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "COMPROMISED"

Windows

dir "%PROGRAMDATA%\wt.exe" 2>nul && echo COMPROMISED

Linux

ls -la /tmp/ld.py 2>/dev/null && echo "COMPROMISED"

Option 2) Utiliser Aikido (gratuit)

Connectez vos dépôts à Aikido (https://app.aikido.dev). Le Malware Monitor d'Aikido compare vos dépendances avec le flux de malwares en direct d'Aikido Intel. Si axios@1.14.1, axios@0.30.4, ou plain-crypto-js@4.2.1 est présente dans l'un de vos projets, Aikido la signale immédiatement. Ceci est disponible sur le plan gratuit.

Vérifiez si votre code est affecté par l'attaque de la chaîne d'approvisionnement Axios – scannez-le gratuitement avec Aikido

Étapes de remédiation

  1. Épingler aux versions sûres :
npm install axios@1.14.0   # utilisateurs 1.x
npm install axios@0.30.3   # utilisateurs 0.x
  1. Ajouter des remplacements pour empêcher la résolution transitive :
{
  "dependencies": { "axios": "1.14.0" },
  "overrides":    { "axios": "1.14.0" },
  "resolutions":  { "axios": "1.14.0" }
}
  1. Supprimez plain-crypto-js depuis node_modules:
rm -rf node_modules/plain-crypto-js
npm install --ignore-scripts
  1. Si un artefact RAT est trouvé (com.apple.act.mond, wt.exe, ld.py), ne tentez pas de nettoyer sur place. Reconstruisez à partir d'un état sain connu.
  2. Faites pivoter toutes les informations d'identification accessibles sur le système affecté : jetons npm, clés d'accès AWS, clés privées SSH, secrets CI/CD, .env valeurs.
  3. Auditez les journaux du pipeline CI/CD pour toute exécution ayant installé les versions affectées. Renouvelez tous les secrets injectés.
  4. Exécutez npm ci --ignore-scripts comme politique permanente dans le CI/CD.

Ce qui s'est passé lors de l'attaque de la chaîne d'approvisionnement d'axios

L'attaquant a compromis le jasonsaayman compte npm, le mainteneur principal d'axios. L'e-mail du compte a été modifié en ifstap@proton.me. L'attaquant a ensuite publié axios@1.14.1 à 00:21 UTC le 31 mars et axios@0.30.4 à 01:00 UTC. Les branches 1.x et 0.x (héritée) ont toutes deux été touchées en 39 minutes.

Aucune des versions ne correspondait à un commit, un tag ou une release dans le dépôt GitHub d'axios. Les releases légitimes d'axios sont publiées via GitHub Actions avec une liaison OIDC Trusted Publisher. Celles-ci ont été publiées manuellement avec un jeton d'accès npm volé.

Le seul changement dans les deux versions a été l'ajout de plain-crypto-js@^4.2.1 en tant que dépendance. Ce package n'est jamais importé nulle part dans le code source d'axios. Il existe uniquement pour exécuter un hook post-installation qui déploie un RAT.

La dépendance a été pré-étagée environ 18 heures plus tôt par un compte d'attaquant distinct (nrwise, nrwise@proton.me). Une version leurre propre (4.2.0) a été publiée en premier pour établir l'historique du registre, suivie par la version malveillante 4.2.1 à 23h59 UTC le 30 mars.

Le dropper RAT (setup.js) contacte sfrclak[.]com:8000 et délivre des charges utiles spécifiques à la plateforme : un binaire macOS déguisé en démon de cache Apple à /Library/Caches/com.apple.act.mond, un script PowerShell sur Windows exécuté via un VBScript caché avec l'interpréteur copié dans %PROGRAMDATA%\wt.exe, et un script Python sous Linux à l'adresse /tmp/ld.py. Après exécution, le dropper s'auto-supprime et remplace son propre package.json par un stub propre pour masquer les preuves.

{{cta}}

Indicateurs de compromission (IOCs)

Versions axios malveillantes et dépendances :

  • axios@1.14.1 (somme SHA : 2553649f2322049666871cea80a5d0d6adc700ca)
  • axios@0.30.4 (somme SHA : d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71)
  • plain-crypto-js@4.2.1 (somme SHA : 07d889e2dadce6f3910dcbc253317d28ca61c766)

Réseau :

  • C2: sfrclak[.]com / 142.11.206[.]73 / http://sfrclak[.]com:8000/6202033

Système de fichiers :

  • macOS : /Library/Caches/com.apple.act.mond
    • sha256 : 92ff08773995ebc8d55ec4b8e1a225d0d1e51efa4ef88b8849d0071230c9645a
  • Windows : %PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs, %TEMP%\6202033.ps1
    • sha256 : 617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101 (powershell)
  • Linux : /tmp/ld.py
    • sha256 : fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf

Comptes d'attaquants :

Comment se protéger contre l'installation de malwares

Aikido Safe Chain (https://github.com/AikidoSec/safe-chain) est un outil open source qui s'intègre à npm, yarn et pnpm. Il vérifie chaque package par rapport au flux de malwares d'Aikido Intel avant qu'il n'atteigne votre machine et applique un âge minimum configurable pour les packages (48 heures par défaut), supprimant les versions nouvellement publiées jusqu'à ce qu'elles aient été validées. Dans cette attaque axios, plain-crypto-js@4.2.1 existait depuis moins de 24 heures avant que les versions axios compromises ne l'intègrent. La vérification de l'âge de Safe Chain à elle seule l'aurait bloqué.

Gratuit, aucun jeton requis :

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh

Article en cours de rédaction... Restez informé pour les mises à jour.

{{cta}}

Partager :

https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

Vérifiez si vous êtes concerné
Analyser les malwares
Gratuit

Abonnez-vous pour les actualités sur les menaces.

4,7/5
Fatigué des faux positifs ?
Essayez Aikido, comme 100 000 autres.
Commencez maintenant
Obtenez une démonstration personnalisée

Approuvé par plus de 100 000 équipes

Réserver maintenant
Analysez votre application à la recherche d'IDORs et de chemins d'attaque réels

Approuvé par plus de 100 000 équipes

Démarrer l'analyse
Découvrez comment le pentest IA teste votre application

Approuvé par plus de 100 000 équipes

Démarrer les tests
Vérifiez si vous êtes affecté par l'attaque de la chaîne d'approvisionnement Axios

Gratuit, aucune carte de crédit requise

Analyser les malwares

Sécurisez votre environnement dès maintenant.

Sécurisez votre code, votre cloud et votre environnement d’exécution dans un système centralisé unique.
Détectez et corrigez les vulnérabilités rapidement et automatiquement.

Aucune carte de crédit requise | Résultats en 32 secondes.