Thème d'affichage

Axios compromis : un cheval de Troie découvert dans une dépendance du célèbre package npm

Nicolas Lecointre · 31 Mar 2026 à 10h06
Axios compromis : un cheval de Troie découvert dans une dépendance du célèbre package npm

npm install, le loup est dans la bergerie — Axios, la librairie HTTP présente dans énormément de projets Node.js, a été compromise cette nuit sur npm.

Deux versions piégées embarquaient un cheval de Troie multi-OS capable de prendre le contrôle de votre machine. Avec plus de 300 millions de téléchargements par semaine, la surface d'exposition potentielle donne le vertige.

Un casse en deux actes

L'attaque n'a rien d'improvisé, bien au contraire.

Le 30 mars à 7h57 heure de Paris, l'attaquant publie sur npm un package anodin baptisé plain-crypto-js en version 4.2.0 : du code propre, un historique de publication crédible, rien qui déclenche les scanners automatiques. Le leurre est posé.

18 heures plus tard, il pousse la version 4.2.1, cette fois armée d'un script postinstall qui fait office de dropper (le mécanisme qui dépose le malware sur la machine).

Puis, en utilisant le compte npm compromis du mainteneur principal d'Axios, il publie [email protected] à 2h21 du matin heure de Paris, suivi de [email protected] à 3h. Les deux branches couvertes en 39 minutes.

Le compte concerné était celui de jasonsaayman, qui n'est autre que le mainteneur principal du projet. L'attaquant avait redirigé l'adresse email du compte vers un ProtonMail anonyme et utilisé un token npm classique longue durée pour contourner le système de publication sécurisé (OpenID Connect) du projet.

Alors que tout le pipeline de release était blindé, ce vieux token traînait encore dans un coin.

Le fantôme dans la dépendance

Et le plus vicieux, c'est qu'aucune ligne de code malveillant ne figurait dans Axios lui-même. Les versions piégées ajoutaient simplement plain-crypto-js comme dépendance runtime, un package jamais importé, jamais appelé, dont le seul rôle était de déclencher son script d'installation.

Ce script, obfusqué par un encodage en deux couches (Base64 inversé et chiffrement XOR), contactait un serveur de commande et contrôle et déployait un RAT (cheval de Troie à accès distant) adapté à chaque OS.

Sur macOS, un binaire planqué dans /Library/Caches/ sous un nom imitant un daemon Apple. Sur Windows, PowerShell copié et renommé en wt.exe pour se faire passer pour Windows Terminal. Sur Linux, un script Python lancé en arrière-plan.

Après livraison, le dropper effaçait ses propres traces : suppression de setup.js, remplacement du package.json compromis par une version propre préparée à l'avance. Un développeur inspectant son dossier node_modules après coup n'y voyait que du feu. Seule la présence du répertoire plain-crypto-js trahissait alors le passage de l'attaquant.

La piste de l’espionnage ?

OSS 117 dubitatif

Ce qui distingue cette attaque du tout-venant des malwares npm, c'est ce que le RAT ne fait pas : pas de cryptominer, pas de ransomware, pas de vol de portefeuilles crypto.

Selon Open Source Malware, le malware cible en priorité les répertoires .ssh et .aws, surveille les processus actifs et fait de la reconnaissance système approfondie. Le profil d'un acteur étatique en mode collecte de renseignements, pas d'un cybercriminel classique.

Socket a par ailleurs identifié deux packages supplémentaires distribuant le même malware via des dépendances embarquées : @shadanai/openclaw et @qqbrowser/openclaw-qbot, qui intégraient directement la version piégée d'Axios dans leur propre node_modules.

Découvrez Passbolt, le gestionnaire de mots de passe open source pour les équipes

Ce qu'il faut faire maintenant

Les versions compromises (1.14.1 et 0.30.4) ont été, en toute logique, retirées de npm.

Si vous les avez installées, considérez votre machine comme compromise et régénérez immédiatement tous vos tokens, clés SSH et identifiants cloud.

Les versions sûres sont les 1.14.0 et 0.30.3. Cherchez les artefacts du RAT : /Library/Caches/com.apple.act.mond sur macOS, %PROGRAMDATA%\wt.exe sur Windows, /tmp/ld.py sur Linux.

Pour la suite, un conseil qui vaut pour tous vos pipelines CI/CD : npm ci --ignore-scripts. Les hooks postinstall sont un vecteur d'attaque trop puissant pour être exécutés aveuglément.

Axios avait pourtant fait les choses bien : publication via GitHub Actions, signature OIDC, pipeline vérifié. Mais un bête token qu'on oublie de révoquer suffit à foutre tout ça en l'air.

Et si le mode opératoire vous rappelle quelque chose, c'est normal : la compromission de Trivy il y a quelques semaines avait déjà montré comment des tokens volés via GitHub Actions finissaient par infecter des packages npm. Visiblement, quelqu'un a bien pris des notes.

À propos de l'auteur

Nicolas Lecointre

Nicolas Lecointre

Chief Happiness Officer des développeurs, ceinture noire de sudo. Pour rire, j'ai créé Les Joies du Code. J'utilise Vim depuis 10 ans parce que je sais pas comment le quitter.

Voir sa page auteur

À lire également

Articles similaires