Une attaque sophistiquée de la chaîne d'approvisionnement a compromis la bibliothèque JavaScript Axios, largement utilisée, en injectant un cheval de Troie d'accès à distance (RAT) multiplateforme dans ce que la société de sécurité Wiz estime être 80 % des environnements cloud et de code. L'incident, au cours duquel des versions malveillantes du package npm ont été disponibles pendant environ trois heures, représente l'une des failles les plus importantes de l'écosystème open-source, compte tenu des 100 millions de téléchargements hebdomadaires d'Axios.
« Les hackers nord-coréens possèdent une solide expérience des attaques de la chaîne d'approvisionnement, qu'ils ont historiquement utilisées pour voler des cryptomonnaies », a déclaré John Hultquist, analyste en chef du Threat Intelligence Group de Google (GTIG), dans un communiqué. « L'ampleur totale de cet incident est encore incertaine, mais étant donné la popularité du package compromis, nous nous attendons à ce qu'il ait des répercussions considérables. » Le GTIG a attribué l'attaque à UNC1069, un acteur de menace nord-coréen.
L'attaque a débuté le 31 mars lorsque l'acteur de menace a publié les versions malveillantes [email protected] et [email protected] sur le registre npm. Cela a été possible en compromettant le compte npm du mainteneur principal du projet et en utilisant un ancien jeton à longue durée de vie pour contourner le flux de publication plus sécurisé basé sur OIDC. Les packages malveillants incluaient une dépendance fantôme, plain-crypto-js, contenant un script post-installation pour télécharger le RAT.
La faille met en évidence une vulnérabilité critique dans la chaîne d'approvisionnement logicielle, affectant une bibliothèque comptant près de 175 000 projets dépendants. L'impact de l'attaque sur les environnements de développement et les pipelines CI/CD pourrait entraîner des vols d'identifiants importants et des mouvements latéraux au sein des réseaux d'entreprise. Pour des entreprises comme Wiz et Snyk, l'événement souligne la nécessité d'une gestion plus stricte des dépendances et d'une vérification au moment de l'exécution, augmentant potentiellement la demande pour leurs services d'analyse de sécurité et de renseignement sur les menaces.
Déroulement de l'attaque
Les attaquants ont fait preuve d'une sophistication opérationnelle remarquable. Environ 18 heures avant l'attaque principale, un compte nommé nrwise a publié un package leurre sain, [email protected], pour établir un historique légitime sur le registre npm. Peu avant la compromission d'Axios, ils l'ont mis à jour vers la version 4.2.1, laquelle contenait la charge utile malveillante.
Les versions compromises d'Axios ont ajouté ce package malveillant comme dépendance. Lorsque les développeurs installaient ou mettaient à jour Axios, le script postinstall de plain-crypto-js s'exécutait, contactant un serveur de commande et de contrôle (C2) à l'adresse sfrclak.com pour récupérer le malware spécifique à la plateforme.
Le malware était un RAT multiplateforme avec des variantes pour Windows, macOS et Linux.
- Sur macOS, le binaire était écrit dans
/Library/Caches/com.apple.act.mond et pouvait auto-signer les charges utiles injectées pour contourner Gatekeeper.
- Sur Windows, un script PowerShell se faisant passer pour Windows Terminal (
wt.exe) était copié dans %PROGRAMDATA%, avec une persistance établie via une clé de registre Run.
- Sur Linux, un script Python était stocké sous le nom
/tmp/ld.py et exécuté.
Après avoir déployé la charge utile, le script tentait d'effacer ses traces en remplaçant le fichier package.json malveillant par une version saine, trompant ainsi les développeurs qui pourraient inspecter leurs packages installés.
Impact étendu et remédiation
Bien que les packages malveillants aient été retirés du registre npm en moins de trois heures, la vitesse de téléchargement élevée d'Axios signifie qu'un nombre substantiel de systèmes ont été compromis. Wiz a rapporté avoir observé l'exécution du malware dans environ 3 % des environnements affectés qu'il surveille. La société de sécurité Huntress a également signalé plus de 100 appareils touchés.
Les experts en sécurité recommandent une action immédiate. Il est conseillé aux organisations d'auditer leurs fichiers de verrouillage de projet (lockfiles) et leurs journaux CI/CD à la recherche de toute trace de [email protected], [email protected] ou [email protected].
« N'essayez pas de nettoyer les systèmes compromis. Reconstruisez-les à partir d'un instantané (snapshot) connu comme sain », ont conseillé les chercheurs de Snyk. Tout environnement où ces versions ont été installées doit être considéré comme entièrement compromis. Tous les identifiants, y compris les jetons npm, les clés de fournisseur cloud et les clés SSH, doivent être révoqués et réémis.
Pour une défense à long terme, les équipes de sécurité devraient envisager d'imposer npm ci --ignore-scripts dans les pipelines de construction automatisés afin d'empêcher l'exécution de scripts malveillants. La mise en œuvre de politiques d'ancienneté des packages, bloquant l'installation de packages nouvellement publiés, aurait également pu prévenir cette attaque, car la dépendance malveillante plain-crypto-js avait moins d'un jour.
Cet article est fourni à titre informatif uniquement et ne constitue pas un conseil en investissement.