🗓️ 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 de crypto-js@4.2.0) depuis le compte nrwise@proton.me
  • 30 mars 23:59 UTC : Publication de plain-crypto-js@4.2.1 contenant un hook postinstall malveillant dans setup.js
  • 31 mars 00:21 UTC : Publication de axios@1.14.1 injectant plain-crypto-js@^4.2.1 comme dépendance runtime (compte compromis jasonsaayman, email remplacé par ifstap@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-js par 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 via nohup
  • 🍎 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