En bref
Le 31 mars 2026, des attaquants ont compromis le compte npm du mainteneur principal d'Axios, le client HTTP JavaScript le plus populaire (83 millions de téléchargements hebdomadaires). Ils ont publié des versions malveillantes (1.14.1 et 0.30.4) contenant un RAT multiplateforme qui vole les identifiants, clés SSH et jetons cloud des machines développeurs. Rétrogradez immédiatement vers Axios 1.14.0, faites pivoter tous vos secrets et recherchez les indicateurs de compromission.
Essayez Apidog dès aujourd'hui
Introduction
Axios traite plus de requêtes HTTP que toute autre bibliothèque JavaScript. Si vous avez créé un client API, testé des endpoints ou connecté un frontend à un backend ces cinq dernières années, vous l’avez sûrement utilisé.
Le 31 mars 2026, à 00h21 UTC, un acteur malveillant a publié Axios 1.14.1 via un compte mainteneur piraté. Le package semblait identique à la version légitime, à une différence près : seul le fichier package.json avait changé, injectant une dépendance fantôme nommée plain-crypto-js qui déployait un RAT sur chaque machine exécutant npm install.
Les versions malveillantes sont restées actives environ deux à trois heures avant leur retrait par npm. Deux à trois heures sur 83 millions de téléchargements hebdomadaires.
💡 Si vous développez ou testez des API, cette attaque a ciblé directement votre chaîne d’outils. Le client HTTP intégré d’Apidog élimine le besoin de bibliothèques HTTP tierces dans votre workflow de test d’API, supprimant ainsi cette surface d’attaque.
Cet article détaille le fonctionnement de l’attaque, les méthodes de détection de compromission et les changements à appliquer à la gestion des dépendances pour les équipes API.
Comment s'est déroulée l'attaque de la chaîne d'approvisionnement Axios
La chronologie
-
30 mars, 05:57 UTC : Publication de
plain-crypto-js@4.2.0(leurre propre) sur npm. -
30 mars, 23:59 UTC : Publication de la version malveillante
plain-crypto-js@4.2.1(hook postinstall). -
31 mars, 00:21 UTC : Publication de
axios@1.14.1via le compte compromis. -
31 mars, 01:00 UTC : Publication de
axios@0.30.4(pour la branche 0.x). - 31 mars, ~03:15 UTC : npm retire les deux versions malveillantes.
-
31 mars, 04:26 UTC : npm publie un stub de sécurité pour
plain-crypto-js.
Compromission du compte
L’attaquant contrôle le compte npm jasonsaayman (mainteneur principal Axios), change l’email pour ifstap@proton.me. Indices clés :
- Les versions légitimes Axios utilisent GitHub Actions avec OIDC Trusted Publisher (npm). Les versions compromises n’ont aucune liaison OIDC.
- Absence de champ
gitHeadsur les versions compromises (pas de commit GitHub associé). - Utilisation de jetons npm longue durée pour publier manuellement, hors CI/CD.
Automatisez la détection d’absence de provenance CI/CD sur vos propres packages npm.
Technique d’injection de dépendances
L’attaquant ajoute simplement plain-crypto-js@^4.2.1 comme dépendance dans package.json : aucune modification du code source Axios. Ce package n’est importé nulle part : il sert uniquement à déclencher son hook postinstall lors d’un npm install.
Analyse : seul package.json diffère entre Axios 1.14.0 (propre) et 1.14.1 (compromis).
Ce que fait la charge utile malveillante
Mécanisme du dropper
Le hook postinstall de plain-crypto-js exécute un fichier obfusqué : setup.js (4,2 Ko).
-
Couche 1 : Chiffrement XOR avec clé dérivée de
"OrDeR_7077" - Couche 2 : Encodage Base64 + inversion de caractères
Une fois décodé, le dropper détecte l’OS et lance des charges utiles spécifiques.
Voies d’attaque par plateforme
macOS :
Écrit un AppleScript dans /tmp/6202033
Exécute via osascript
Télécharge la charge utile dans /Library/Caches/com.apple.act.mond
Windows :
Copie PowerShell dans %PROGRAMDATA%\wt.exe (persistance)
Exécute le dropper VBScript via cscript
Linux :
Télécharge le RAT Python dans /tmp/ld.py
Exécute via nohup python3
Les trois branches contactent un serveur C2 :
- macOS :
packages.npm.org/product0 - Windows :
packages.npm.org/product1 - Linux :
packages.npm.org/product2
Capacités du RAT
- Exécution de commandes shell
- Accès et exfiltration du filesystem
- Liste/injection de processus
- Injection binaire en mémoire (fileless)
- Beacon toutes les 60 s vers le C2
Conséquence : contrôle total de la machine de dev, accès à .env, clés API, SSH, jetons cloud.
Anti-forensics : charge utile auto-nettoyante
Après exécution, le dropper :
- Supprime
setup.js - Supprime le
package.jsonmalveillant - Renomme un
package.md“propre” enpackage.json(simule la v4.2.0)
Effet : npm list affiche la version “propre” pour tromper l’audit manuel.
Qui est derrière cette attaque
Google Threat Intelligence Group attribue l’attaque à UNC1069 (présumé nord-coréen). Le malware macOS est très similaire à WAVESHAPER (porte dérobée C++ déjà suivie en 2026 par Mandiant).
Objectif classique : compromission d’un outil de dev largement utilisé pour voler identifiants et accès cloud à grande échelle. Sophistication élevée : injection de dépendance en deux temps, RAT multiplateforme, nettoyage anti-forensic.
Comment vérifier si vous êtes affecté
Étape 1 : Vérifiez votre version d’Axios
Dans chaque projet utilisant Axios :
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Si un résultat s’affiche, le projet a installé une version compromise.
Étape 2 : Vérifiez la présence de la dépendance malveillante
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIELLEMENT AFFECTÉ"
La présence du dossier confirme l’exécution de la charge utile.
Étape 3 : Recherchez les artefacts RAT sur le système
macOS :
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Linux :
ls -la /tmp/ld.py 2>/dev/null
Windows (PowerShell) :
Test-Path "$env:PROGRAMDATA\wt.exe"
Étape 4 : Vérifiez les indicateurs réseau
Bloquez/recherchez les connexions à :
-
Domaine C2 :
sfrclak.com -
IP C2 :
142.11.206.73 -
URL C2 :
http://sfrclak.com:8000/6202033
Étape 5 : Vérifiez les logs CI/CD
Examinez tous les pipelines CI/CD exécutés entre le 31 mars 00h21 UTC et 03h15 UTC. Tout npm install ou npm ci dans cette plage ayant résolu Axios a pu lancer le dropper dans votre environnement de build.
Mesures de remédiation immédiates
Si vous trouvez des indicateurs de compromission, considérez la machine comme totalement compromise.
1. Rétrogradez immédiatement Axios
npm install axios@1.14.0
Pour la branche 0.x :
npm install axios@0.30.3
2. Ajoutez des overrides de version à votre package.json
Empêchez la résolution transitive :
{
"overrides": {
"axios": "1.14.0"
}
}
Pour Yarn :
{
"resolutions": {
"axios": "1.14.0"
}
}
3. Supprimez le package malveillant
rm -rf node_modules/plain-crypto-js
4. Faites pivoter toutes les informations d’identification
Supposez les éléments suivants compromis :
- Jetons npm
- Credentials AWS/GCP/Azure
- Clés SSH
- Jetons GitHub
- Clés API dans
.env - Credentials base de données
- Secrets dans les variables d’environnement
Faites pivoter tout.
5. Bloquez le C2 au niveau réseau
Ajoutez à /etc/hosts ou votre pare-feu :
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
6. Si artefact trouvé, réinstallez la machine
Si des artefacts sont présents (cf. étape 3), considérez la machine comme irrécupérable. Reconstruisez depuis un état sain connu.
Défenses à long terme pour les équipes API
Utilisez des lockfiles et épinglez les versions
L’attaque Axios a exploité les plages semver ^. Préférez :
{
"dependencies": {
"axios": "1.14.0"
}
}
Engagez toujours vos package-lock.json ou yarn.lock. Utilisez npm ci au lieu de npm install en CI/CD.
Désactivez les scripts postinstall dans CI/CD
Empêchez l’exécution de hooks malveillants :
npm ci --ignore-scripts
Cela peut casser certains packages natifs : testez, puis autorisez sélectivement via .npmrc :
ignore-scripts=true
Auditez régulièrement vos dépendances
npm audit
npx socket-security/cli audit
Automatisez dans vos pipelines. Un niveau critique doit bloquer la release.
Réduisez la surface de dépendance HTTP client
Pourquoi dépendre d’un client HTTP tiers ?
- Apidog fournit un client HTTP intégré pour tests, débogage et documentation API.
- Inutile d’installer Axios, node-fetch ou got dans votre stack de test.
- Le client HTTP est intégré à la plateforme et ne repose sur aucune dépendance npm externe.
Pour les tests d’API :
- Tests API : Utilisez le builder visuel Apidog plutôt que des scripts Axios.
- Débogage : Utilisez l’inspecteur de requêtes intégré.
- Mock : Utilisez le mock intelligent Apidog plutôt que Express+Axios.
- CI/CD : L’interface CLI d’Apidog permet des tests API automatisés sans dépendance HTTP npm.
Essayez Apidog gratuitement pour constater la réduction de risque liée à la suppression des dépendances HTTP dans votre workflow API.
Vérifiez la provenance des paquets
npm prend en charge la provenance via Sigstore. Testez :
npm audit signatures
Les versions compromises Axios n’avaient pas de provenance OIDC. Toute version sans provenance doit être considérée comme suspecte.
Ce que cela signifie pour l’écosystème JavaScript
Le modèle de confiance est rompu
La sécurité npm repose sur les comptes mainteneurs. Un identifiant compromis = contrôle sur un package installé par des millions de projets. L’authentification à deux facteurs aide, mais des jetons longue durée peuvent toujours fuiter.
Changements structuraux discutés :
- OIDC obligatoire : CI/CD avec jetons OIDC pour les paquets populaires.
- Approbation à deux mainteneurs pour les paquets critiques.
-
Permissions d’exécution limitées pour les scripts
postinstall.
Les attaques de la chaîne d’approvisionnement ne ralentissent pas
Après l’incident RubyGems et la crise PyPI, tous les registres de paquets sont sous attaque constante. Considérez votre arbre de dépendances comme une surface d’attaque.
Sur Reddit : “NPM est la plus grande faiblesse d’Internet aujourd’hui et cela causera encore une catastrophe géante.” L’attaque Axios montre que ce n’est pas exagéré.
Comparaison : approches de dépendances clients HTTP
| Approche | Risque de la chaîne d'approvisionnement | Charge de maintenance | Capacité de test |
|---|---|---|---|
| Axios + scripts personnalisés | Élevé (dépendance tierce) | Élevé (gestion des versions) | Configuration manuelle requise |
| Node.js native fetch | Faible (intégré au runtime) | Faible | Fonctionnalités de test limitées |
| Client intégré Apidog | Aucun (pas de dépendance npm) | Aucun (géré par la plateforme) | Tests complets, mocking, documentation |
| Scripts curl/httpie | Faible (outil au niveau du système) | Moyen | Automatisation limitée |
FAQ
Axios est-il sûr à utiliser maintenant ?
Oui. Les versions 1.14.0 et 0.30.3 sont propres. Les versions compromises (1.14.1 et 0.30.4) ont été retirées rapidement. Vérifiez votre version :
npm list axios
Assurez-vous que votre lockfile référence une version sûre.
Comment savoir si le RAT s’est exécuté sur ma machine ?
Cherchez les artefacts : /Library/Caches/com.apple.act.mond (macOS), /tmp/ld.py (Linux), ou %PROGRAMDATA%\wt.exe (Windows). Vérifiez également node_modules/plain-crypto-js. L’absence d’artefacts ne garantit pas la sécurité si vous avez installé une version compromise.
Dois-je arrêter complètement d’utiliser Axios ?
Pas nécessairement. Axios reste bien maintenu, mais réévaluez la nécessité d’un client HTTP tiers. Node.js 18+ inclut un fetch natif. Pour les tests API, des plateformes comme Apidog fournissent des clients HTTP intégrés, sans dépendance supplémentaire.
Comment prévenir les attaques de la chaîne d’approvisionnement ?
- Épinglez les versions exactes
- Engagez les lockfiles
- Exécutez
npm ci --ignore-scriptsen CI/CD - Auditez régulièrement les dépendances
- Vérifiez la provenance (
npm audit signatures) - Minimisez l’arbre de dépendances
- Pour les tests d’API, privilégiez des plateformes intégrées sans dépendance npm HTTP
Cette attaque est-elle liée à la fuite du code source de Claude ?
Non. Les deux événements sont survenus le même jour, mais sont indépendants. L’attaque Axios : compromission de la chaîne d’approvisionnement par un acteur étatique. Fuite Claude : bug Bun ayant livré des source maps en production.
Qui était derrière l’attaque Axios ?
Google Threat Intelligence Group : UNC1069, groupe nord-coréen. Malware macOS proche de WAVESHAPER (Mandiant). Objectif : exfiltration d’identifiants développeur et cloud.
Combien de développeurs ont été affectés ?
Exposition potentielle : très élevée (83M téléchargements/semaine). Pas de chiffres officiels npm. La détection StepSecurity : le dropper contacte le C2 en 1,1 s après le démarrage de npm install.
Apidog peut-il aider à prévenir les attaques de la chaîne d’approvisionnement ?
Oui. Apidog élimine le besoin d’installer des clients HTTP npm pour les tests/débogages/documentations API. Moins de dépendances = moins de surface d’attaque.
Points clés à retenir
- L’attaque Axios a compromis plus de 83M de téléchargements/sem via un seul compte mainteneur volé
- RAT multiplateforme, vole identifiants, SSH et jetons cloud
- Vérifiez vos systèmes avec les étapes ci-dessus
- Épinglez les versions exactes, désactivez les scripts postinstall en CI/CD
- Réduisez la surface de dépendance HTTP client avec des outils intégrés comme Apidog
- La sécurité des registres de paquets est un problème systémique (npm, PyPI, RubyGems)
L’attaque Axios est un signal d’alarme. Chaque dépendance dans votre node_modules est une décision de confiance. Faites ce choix délibérément, pas par défaut.
Top comments (0)