Endor Labs publie une analyse détaillée du retour de la campagne PhantomRaven, révélant trois nouvelles vagues (2, 3 et 4) réparties entre novembre 2025 et février 2026, totalisant 88 paquets npm malveillants, dont 81 encore disponibles au moment de l’écriture, et 2 C2 sur 3 toujours actifs. Une mise à jour précise que l’opérateur a modifié l’infrastructure et les charges utiles servies à distance (ex. un script minimal « Hello, world! » désormais renvoyé par le domaine de la vague 2), illustrant le risque des dépendances URL qui permettent de changer silencieusement le code sans nouvelle version publiée.
La campagne repose sur la technique Remote Dynamic Dependencies (RDD) : un paquet npm apparemment bénin déclare une dépendance HTTP externe dans son package.json. Lors de npm install, npm récupère un tarball hébergé par l’attaquant contenant un preinstall qui exécute un payload de 259 lignes. Ce dernier collecte des emails développeur (depuis .gitconfig, .npmrc, variables d’environnement, package.json), des tokens/variables CI/CD (GitHub, GitLab, Jenkins, CircleCI), et fingerprinte la machine (IP publique via api64.ipify.org, OS, version Node). L’exfiltration est redondante (HTTP GET + POST + WebSocket placeholder) avec User-Agent Windows/Chrome spoofé et un mode furtif (aucune sortie console pendant preinstall). Le code est identique à 257/259 lignes entre vagues, seules les URLs C2 changent; un leurre « Hello, world! » masque l’activité.
Les quatre vagues partagent des empreintes d’infrastructure constantes: C2 sur AWS EC2, Amazon Registrar + WHOIS Privacy, Route53, aucun TLS (HTTP uniquement), et serveurs Apache/2.4.58 sur Ubuntu exposant les endpoints jpd.php / npm.php. Les C2 connus et IP incluent: packages.storeartifact.com (54.173.15.59:8080, vague 1), npm.jpartifacts.com (100.26.42.247, vague 2), package.storeartifacts.com (13.219.250.107, vague 3) et npm.artifactsnpm.com (vague 4). Endor Labs corrèle les vagues par similarités de code, infrastructure et opérations, malgré 50+ comptes npm jetables, rotation de noms de domaine, endpoints PHP et métadonnées (visibles « MAX/ZOD » en vague 4 tandis que le tarball RDD reste signé « JPD »).
Ciblage et leurres (slopsquatting) 🎯: la campagne enregistre des noms de paquets plausibles mais non revendiqués, visant des espaces Babel (@babel/plugin-*), ESLint, GraphQL Codegen (@graphql-codegen/*), build tools (ex. Yoshi/Vitest), ou de faux scopes privés. La vague 2 a aussi listé la dépendance RDD en dependencies et devDependencies pour forcer le téléchargement malveillant dans tous les modes d’installation. Une mise à jour note la rotation d’IP et l’indisponibilité ponctuelle du C2 de la vague 4 lors des tests, tandis que la charge de la vague 2 a été réduite à un script inoffensif — sans annuler le risque structurel lié aux dépendances URL.
Contexte additionnel: bien que certains attribuent ces paquets à un « chercheur sécurité », Endor Labs souligne des caractéristiques incompatibles avec des artefacts de recherche légitimes (collecte de données étendue, dépendance URL mutable, aucune transparence dans README/console/métadonnées, rotation délibérée d’identités). Type d’article: analyse de menace technique visant à documenter, corréler et exposer les IOCs et TTPs de PhantomRaven.
• IOCs (indicateurs) 🧩
- C2 domaines:
packages.storeartifact.com(vague 1),npm.jpartifacts.com(vague 2),package.storeartifacts.com(vague 3),npm.artifactsnpm.com(vague 4) - IP/ports: 54.173.15.59:8080; 100.26.42.247:80; 13.219.250.107:80
- Endpoints:
/jpd.php,/npm.php(HTTP uniquement) - Hébergement/registrar/DNS: AWS EC2; Amazon Registrar, Inc.; AWS Route53; WHOIS Privacy
- Serveur: Apache/2.4.58 sur Ubuntu
• TTPs (techniques/tactiques) 🛠️
- Supply chain via Remote Dynamic Dependencies (RDD) avec URL dependency dans
package.json - preinstall auto-exécuté, payload JavaScript (259 lignes; dépendances
axios ^1.7.9,node-fetch ^3.3.2,ws ^8.18.0) - Collecte: emails développeur (.gitconfig, .npmrc, env, package.json), variables CI/CD (GitHub, GitLab, Jenkins, CircleCI), fingerprinting système + IP publique
- Exfiltration redondante: GET + POST + WebSocket (placeholder
wss://yourserver.com/socket), User-Agent spoofé, mode furtif (logs masqués en preinstall) - Lookup post-exfil par email (base C2 requêtable)
- Slopsquatting sur namespaces populaires; rotation d’identités npm, métadonnées et C2; aucun TLS; payload mutable via dépendances URL
🧠 TTPs et IOCs détectés
TTP
[‘T1195.002 - Supply Chain Compromise: Compromise Software Dependencies and Development Tools’, ‘T1059.007 - Command and Scripting Interpreter: JavaScript’, ‘T1057 - Process Discovery’, ‘T1083 - File and Directory Discovery’, ‘T1071.001 - Application Layer Protocol: Web Protocols’, ‘T1071.004 - Application Layer Protocol: WebSockets’, ‘T1566.001 - Phishing: Spearphishing Attachment’, ‘T1005 - Data from Local System’, ‘T1552.001 - Unsecured Credentials: Credentials In Files’, ‘T1070.004 - Indicator Removal on Host: File Deletion’, ‘T1560.001 - Archive Collected Data: Archive via Utility’, ‘T1583.003 - Acquire Infrastructure: Virtual Private Server’, ‘T1583.001 - Acquire Infrastructure: Domains’, ‘T1583.005 - Acquire Infrastructure: Server’]
IOC
[‘packages.storeartifact.com’, ’npm.jpartifacts.com’, ‘package.storeartifacts.com’, ’npm.artifactsnpm.com’, ‘54.173.15.59:8080’, ‘100.26.42.247:80’, ‘13.219.250.107:80’, ‘/jpd.php’, ‘/npm.php’]
🔗 Source originale : https://www.endorlabs.com/learn/return-of-phantomraven