🗓️ Contexte
L’article, publié le 9 novembre 2026 par Cryptika (source originale : CyberSecurityNews.com), rapporte la découverte par Sonatype Research Labs (confirmée le 4 novembre 2026) de 10 packages npm compromis, référencée sous l’identifiant sonatype-2026-010515 avec un score de sévérité élevé de 8.7.
📦 Packages compromis
Les 12 releases malveillantes sont réparties sur 10 packages :
@adminide-stack/client-redux@adminide-stack/health-api-server@adminide-stack/user-activity-browser@adminide-stack/utils(versions0.0.16-129et0.0.16-130)server-hemera-mongocdeops(version13.5.31)@adminide-stack/forms-core@adminide-stack/yantra-help-browser@cdmbase/wiki-browser@pubngo-stack/help-browser
⚙️ Mécanisme d’attaque
Deux techniques d’obfuscation sont utilisées selon les releases :
- 6 releases : encodage Base64 avec
eval(atob(...)) - 6 releases : permutation de caractères avec le constructeur JavaScript Function
Le loader malveillant interroge des serveurs RPC Ethereum publics pour récupérer une transaction émise par le wallet fixe 0x1eef0849eda15d87f64e51c73c8442cf3c8bcef3. En cas d’échec, il bascule sur l’API Blockscout. Les 4 premiers octets de l’adresse du destinataire de la transaction encodent une adresse IPv4 principale, les 4 suivants une adresse de secours.
Le malware télécharge ensuite du JavaScript encodé XOR via HTTP sur le port 443, aux chemins /0x/cls et /0x/ls. Le code de /0x/cls s’exécute dans l’application via eval et dans un processus node -i détaché. Le code de /0x/ls s’exécute uniquement dans le processus détaché pour persister après la fermeture de l’application.
🔗 Attribution et liens avec PolinRider / GhostAction
- Le même wallet Ethereum a été retrouvé dans les 12 releases et dans un rapport GitGuardian du 27 octobre 2026 liant ce wallet à des loaders PolinRider dans des dépôts GitHub compromis.
- L’IP 95.135.181.151 a été identifiée comme serveur actif le 3 novembre 2026 et figurait déjà comme serveur de fallback dans un script de persistance PolinRider.
- OpenSourceMalware a retracé du code PolinRider à des packages npm datant de mai 2025, avec un payload incluant un RAT et un stealer Python ciblant navigateurs, wallets, Git et stockage cloud.
- Les chercheurs maintiennent une prudence sur l’attribution : Sonatype ne confirme pas que PolinRider et GhostAction partagent le même opérateur ; GitGuardian estime que l’opérateur GhostAction a copié un launcher PolinRider public.
🎯 Particularités techniques notables
- Absence de hooks preinstall/postinstall : le code s’exécute au chargement du package, contournant les protections classiques.
- Headers HTTP spécifiques (
Sec-V) :A10-npm_inject(releases Base64),A10-II(utils 0.0.16-130),A10-E(cdeops 13.5.31). - Persistance via fichiers de démarrage de VS Code, Cursor, Discord, GitHub Desktop.
- Mécanisme de dead drop blockchain : l’attaquant peut changer de serveur C2 sans modifier les packages.
📰 Type d’article
Il s’agit d’une analyse technique détaillant une campagne d’attaque supply chain active, visant à informer les équipes de sécurité sur les indicateurs techniques et les mécanismes d’infection.
🧠 TTPs et IOCs détectés
Acteurs de menace
TTP
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
- T1027 — Obfuscated Files or Information (Defense Evasion)
- T1102 — Web Service (Command and Control)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
- T1547 — Boot or Logon Autostart Execution (Persistence)
- T1555 — Credentials from Password Stores (Credential Access)
- T1552 — Unsecured Credentials (Credential Access)
IOC
- IPv4 :
95.135.181.151— AbuseIPDB · VT · ThreatFox - URLs :
http://95.135.181.151/0x/cls— URLhaus - URLs :
http://95.135.181.151/0x/ls— URLhaus - Fichiers :
dist/main.js
⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 10 novembre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- PolinRider (loader)
- Node RAT (rat)
- Python Stealer (stealer)
🟢 Indice de vérification factuelle : 83/100 (haute)
- ✅ cryptika.com — source reconnue (Rösti community) (20pts)
- ✅ 5849 chars — texte complet (fulltext extrait) (15pts)
- ✅ 4 IOCs (IPs/domaines/CVEs) (10pts)
- ✅ 1/3 IOC(s) confirmé(s) (AbuseIPDB, ThreatFox, URLhaus, VirusTotal) (8pts)
- ✅ 8 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ✅ acteur(s) identifié(s) : PolinRider, GhostAction (5pts)
- ⬜ pas de CVE à vérifier (0pts)
IOCs confirmés externellement :
95.135.181.151(ip) → VT (15/92 détections)
🔗 Source originale : https://www.cryptika.com/hackers-hijack-10-npm-packages-to-spread-polinrider-malware-using-ethereum-blockchain/