🔍 Contexte
Publié le 17 juin 2026 par la Microsoft Defender Security Research Team, cet article documente une attaque supply chain npm de grande envergure ciblant l’écosystème Mastra. Microsoft Threat Intelligence a identifié la compromission et partagé ses conclusions avec l’équipe de sécurité npm, qui a supprimé les packages affectés et révoqué les droits de publication du compte compromis.
⚔️ Déroulement de l’attaque
L’attaque s’est déroulée en six phases :
- Compromission de compte : Prise de contrôle du compte npm
ehindero, mainteneur légitime avec droits de publication sur le scope@mastra. - Création du typosquat : Publication de
easy-day-js, impersonation de la bibliothèque légitimedayjs(57M+ téléchargements hebdomadaires), via un compte anonyme Tutamail. - Empoisonnement massif : Publication de nouvelles versions de 140+ packages
@mastrainjectanteasy-day-js@^1.11.21comme dépendance, toutes taguéeslatest. - Livraison : La plage SemVer
^1.11.21résout vers la version1.11.22contenant le hookpostinstallmalveillant. - Exécution : Le hook déclenche un dropper obfusqué de 4 572 octets (
setup.cjs) qui désactive la vérification TLS et contacte le C2. - Payload de second stade : Téléchargement et exécution d’un implant Node.js multiplateforme (~41 Ko) en processus détaché.
🎯 Stratégie de livraison en deux phases
- Phase 1 (leurre propre) :
easy-day-js@1.11.21publié le 16 juin 2026 à 07:05 UTC — code dayjs légitime, sans payload. - Phase 2 (armement) :
easy-day-js@1.11.22publié le 17 juin 2026 à 01:01 UTC — ajout desetup.cjset du hookpostinstall.
🛠️ Analyse technique du payload
Stage 0 — Dropper obfusqué (setup.cjs) : Tableau de 40 chaînes Base64 mélangées via un seed numérique (0x4c11d), décodées par une fonction personnalisée.
Séquence d’attaque en 5 étapes :
- Désactivation de la vérification TLS (
NODE_TLS_REJECT_UNAUTHORIZED = '0') - Dépôt de marqueurs filesystem :
$TMPDIR/.pkg_historyet$TMPDIR/.pkg_logs(XOR 0x80) - Requête GET vers
https://23.254.164.92:8000/update/49890878pour télécharger le payload de second stade - Écriture du payload sous un nom hexadécimal aléatoire (
<12 hex bytes>.js) et exécution en processus détaché - Auto-suppression du dropper (
fs.rmSync(__filename))
Sur Windows : Injection réflexive d’assembly .NET en mémoire dans cmd.exe, chaîne entièrement fileless.
🔒 Persistance multiplateforme
| OS | Mécanisme | Artefact |
|---|---|---|
| Windows | Registry Run key (HKCU) | NvmProtocal → protocal.cjs |
| macOS | LaunchAgent (RunAtLoad) | com.nvm.protocal.plist |
| Linux | systemd user unit | nvmconf.service |
📤 Collecte et exfiltration
- Inventaire de 166 extensions de wallets crypto (MetaMask, Phantom, Coinbase, Binance, TronLink…)
- Historique de navigation (SQLite) depuis Chrome, Edge, Brave
- Reconnaissance hôte : hostname, architecture, plateforme, UID, applications installées, processus en cours
- Exfiltration via protocole ICAP-like sur HTTPS POST avec User-Agent IE8 spoofé
📋 Type d’article
Analyse technique détaillée et post-mortem d’une attaque supply chain npm, publiée par Microsoft Threat Intelligence, visant à documenter la chaîne d’attaque complète et fournir des indicateurs de compromission exploitables.
🧠 TTPs et IOCs détectés
TTP
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
- T1059.001 — Command and Scripting Interpreter: PowerShell (Execution)
- T1547.001 — Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder (Persistence)
- T1543.001 — Create or Modify System Process: Launch Agent (Persistence)
- T1543.002 — Create or Modify System Process: Systemd Service (Persistence)
- T1055 — Process Injection (Defense Evasion)
- T1620 — Reflective Code Loading (Defense Evasion)
- T1070.004 — Indicator Removal: File Deletion (Defense Evasion)
- T1553.004 — Subvert Trust Controls: Install Root Certificate (Defense Evasion)
- T1041 — Exfiltration Over C2 Channel (Exfiltration)
- T1082 — System Information Discovery (Discovery)
- T1083 — File and Directory Discovery (Discovery)
- T1217 — Browser Information Discovery (Discovery)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
- T1132.001 — Data Encoding: Standard Encoding (Command and Control)
- T1027 — Obfuscated Files or Information (Defense Evasion)
- T1608.001 — Stage Capabilities: Upload Malware (Resource Development)
- T1586.003 — Compromise Accounts: Cloud Accounts (Resource Development)
IOC
- IPv4 :
23.254.164.92— AbuseIPDB · VT · ThreatFox - IPv4 :
23.254.164.123— AbuseIPDB · VT · ThreatFox - URLs :
https://23.254.164.92:8000/update/49890878— URLhaus - SHA256 :
B122A9873BEDF145AE2A7FD024B5F309007DBB025149F4DC4AC3F7E4F32A36A4— VT · MalwareBazaar - SHA256 :
AE70DD4F6BC0D1C8C2848E4E6B51934626C4818DCB5AF99D080DDBD7DC337185— VT · MalwareBazaar - SHA256 :
4A8860240E4231C3A74C81949BE655A28E096A7D72F38FBE84E5B37636B98417— VT · MalwareBazaar - SHA256 :
B73DE25C053C3225A077738A1FCBD9CA6966D7B3CD6F5494A30F0AA0EAE55C7E— VT · MalwareBazaar - SHA256 :
221c45a790dec2a296af57969e1165a16f8f49733aeab64c0bbd768d9943badf— VT · MalwareBazaar - Emails :
ehindero2016@tutamail.com - Emails :
sergey2016@tutamail.com - Fichiers :
setup.cjs - Fichiers :
protocal.cjs - Fichiers :
easy-day-js-1.11.22.tgz - Fichiers :
easy-day-js-1.11.21.tgz - Fichiers :
mastra-1.13.1.tgz - Chemins :
$TMPDIR/.pkg_history - Chemins :
$TMPDIR/.pkg_logs - Chemins :
C:\ProgramData\NodePackages\ - Chemins :
~/Library/NodePackages/ - Chemins :
~/.config/systemd/nvmconf/
Malware / Outils
- easy-day-js (loader)
- setup.cjs (loader)
- protocal.cjs (backdoor)
🟢 Indice de vérification factuelle : 90/100 (haute)
- ✅ microsoft.com — source reconnue (liste interne) (20pts)
- ✅ 23564 chars — texte complet (fulltext extrait) (15pts)
- ✅ 20 IOCs dont des hashes (15pts)
- ✅ 4/6 IOCs confirmés (AbuseIPDB, MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (15pts)
- ✅ 19 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ pas de CVE à vérifier (0pts)
IOCs confirmés externellement :
23.254.164.92(ip) → VT (15/91 détections)23.254.164.123(ip) → VT (15/91 détections)B122A9873BEDF145…(sha256) → VT (13/75 détections)AE70DD4F6BC0D1C8…(sha256) → VT (11/75 détections)
🔗 Source originale : https://www.microsoft.com/en-us/security/blog/2026/06/17/postinstall-payload-inside-mastra-npm-supply-chain-compromise/