🗓️ Contexte
Article publié le 2 avril 2026 par CodeAnt AI, analysant en détail l’attaque supply chain ayant ciblé la bibliothèque JavaScript axios sur le registre npm le 31 mars 2026. Axios est le client HTTP JavaScript le plus utilisé au monde avec plus de 100 millions de téléchargements hebdomadaires.
🔓 Vecteur d’accès initial
L’attaquant a obtenu un token npm classique à longue durée de vie appartenant au mainteneur principal (jasonsaayman). Ce type de token ne possède ni expiration, ni MFA, ni vérification de session. Il a permis de publier directement sur le registre sans passer par le mécanisme OIDC Trusted Publisher habituellement utilisé par les releases légitimes d’axios.
📅 Chronologie de l’attaque
- 30 mars 05:57 UTC : Publication de
plain-crypto-js@4.2.0(clone propre decrypto-js@4.2.0) depuis le comptenrwise@proton.me - 30 mars 23:59 UTC : Publication de
plain-crypto-js@4.2.1contenant un hookpostinstallmalveillant danssetup.js - 31 mars 00:21 UTC : Publication de
axios@1.14.1injectantplain-crypto-js@^4.2.1comme dépendance runtime (compte compromisjasonsaayman, email remplacé parifstap@proton.me) - 31 mars 01:00 UTC : Publication de
axios@0.30.4(branche legacy également compromise) - ~31 mars 03:15 UTC : Suppression des versions malveillantes par npm — fenêtre d’exposition totale : ~2h54min
- 31 mars 03:25 UTC : Mise en quarantaine de
plain-crypto-jspar npm - 31 mars 04:26 UTC : Publication d’un placeholder de sécurité
plain-crypto-js@0.0.1-security.0
⚙️ Mécanisme technique du malware
Le hook postinstall de plain-crypto-js@4.2.1 exécute automatiquement node setup.js lors de npm install. Le dropper utilise deux couches d’obfuscation : inversion de chaîne + décodage Base64, puis chiffrement XOR avec la clé OrDeR_7077 et une constante XOR 333.
Le dropper contacte le serveur C2 sfrclak.com:8000/6202033 via HTTP POST (les identifiants de plateforme sont dans le corps POST, non dans l’URL). Les payloads sont spécifiques à chaque OS :
- 🐧 Linux : Script Python téléchargé dans
/tmp/ld.py, lancé en arrière-plan vianohup - 🍎 macOS : Payload AppleScript via
osascript, stocké dans/Library/Caches/com.apple.act.mond - 🪟 Windows : VBScript (
%TEMP%\6202033.vbs) lançant PowerShell (%TEMP%\6202033.ps1) en mode caché, avec persistance via%PROGRAMDATA%\wt.exe— identifié comme WAVESHAPER.V2
🧹 Auto-destruction et évasion forensique
Après exécution, setup.js supprime sa propre entrée et remplace package.json par un stub indiquant la version 4.2.0. Résultat : npm list plain-crypto-js affiche 4.2.0 et npm audit ne détecte rien. Le seul indicateur post-exécution est un écart entre le lockfile (4.2.1) et la version affichée (4.2.0).
🎯 Attribution et campagne
Google Threat Intelligence Group (GTIG) a publié son attribution le 1er avril 2026, identifiant l’acteur comme UNC1069, groupe à nexus nord-coréen, actif depuis au moins 2018, à motivation financière. La campagne a ciblé en 12 jours : Trivy (19 mars), KICS (23 mars), LiteLLM/PyPI (25 mars), puis axios (31 mars).
📊 Type d’article
Analyse technique post-incident détaillée, combinant reconstruction chronologique, analyse du malware, attribution, IOCs et recommandations de détection, publiée par un éditeur de solutions SCA (CodeAnt AI) à des fins de documentation CTI et de promotion de sa plateforme.
🧠 TTPs et IOCs détectés
Acteurs de menace
- UNC1069 (state-sponsored)
TTP
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1078 — Valid Accounts (Initial Access)
- T1546.016 — Event Triggered Execution: Installer Packages (Persistence)
- T1027 — Obfuscated Files or Information (Defense Evasion)
- T1070.004 — Indicator Removal: File Deletion (Defense Evasion)
- T1059.001 — Command and Scripting Interpreter: PowerShell (Execution)
- T1059.005 — Command and Scripting Interpreter: Visual Basic (Execution)
- T1059.006 — Command and Scripting Interpreter: Python (Execution)
- T1041 — Exfiltration Over C2 Channel (Exfiltration)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
- T1547 — Boot or Logon Autostart Execution (Persistence)
- T1057 — Process Discovery (Discovery)
- T1082 — System Information Discovery (Discovery)
- T1083 — File and Directory Discovery (Discovery)
IOC
- IPv4 :
142.11.206.73 - Domaines :
sfrclak.com - URLs :
http://sfrclak.com:8000/6202033 - SHA1 :
2553649f2322049666871cea80a5d0d6adc700ca - SHA1 :
d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71 - SHA1 :
07d889e2dadce6f3910dcbc253317d28ca61c766 - Emails :
ifstap@proton.me - Emails :
nrwise@proton.me - Fichiers :
setup.js - Fichiers :
ld.py - Fichiers :
wt.exe - Fichiers :
6202033.ps1 - Fichiers :
6202033.vbs - Chemins :
/tmp/ld.py - Chemins :
/Library/Caches/com.apple.act.mond - Chemins :
%PROGRAMDATA%\wt.exe - Chemins :
%TEMP%\6202033.ps1 - Chemins :
%TEMP%\6202033.vbs
Malware / Outils
- WAVESHAPER.V2 (backdoor)
- plain-crypto-js RAT dropper (loader)
- Python RAT (rat)
- AppleScript RAT (rat)
🔗 Source originale : https://www.codeant.ai/blogs/axios-npm-supply-chain-attack