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.1etaxios@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_modulesne le révélera pas. Vous devez vérifier vos fichiers de logs.
Un grand merci pour l'excellente couverture de cet incident par :
- StepSecurity (https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan)
- Socket (https://socket.dev/blog/axios-npm-package-compromised)
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 COMPROMISEDLinux
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.
Étapes de remédiation
- Épingler aux versions sûres :
npm install axios@1.14.0 # utilisateurs 1.x
npm install axios@0.30.3 # utilisateurs 0.x- 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" }
}- Supprimez
plain-crypto-jsdepuis node_modules:
rm -rf node_modules/plain-crypto-js
npm install --ignore-scripts- 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. - 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,
.envvaleurs. - Auditez les journaux du pipeline CI/CD pour toute exécution ayant installé les versions affectées. Renouvelez tous les secrets injectés.
- Exécutez
npm ci --ignore-scriptscomme 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
- sha256 :
- Windows :
%PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs, %TEMP%\6202033.ps1- sha256 :
617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101(powershell)
- sha256 :
- Linux :
/tmp/ld.py- sha256 :
fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf
- sha256 :
Comptes d'attaquants :
- jasonsaayman : mainteneur axios compromis, e-mail changé en ifstap@proton.me
- nrwise : créé par l'attaquant, nrwise@proton.me
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 | shArticle en cours de rédaction... Restez informé pour les mises à jour.
{{cta}}

