EN
en direct

Nimbus Manticore installe des RAT multiplateformes via de faux tests de codage d’entretien

Le 1er septembre 2026, Kaspersky détaille deux RAT multiplateformes, NodeRabbit et PollCat, livrés à des développeurs sous forme de défis de recrutement piégés. Le test de codage d’entretien est devenu une surface d’attaque, et le piège se cache dans le node_modules fourni.

Une pile de dossiers de candidature identiques sur un bureau sombre, l’un entrouvert laissant dépasser un câble ambre.

1er septembre 2026. Kaspersky publie une analyse attribuant au groupe iranien Nimbus Manticore deux RAT multiplateformes inédits, NodeRabbit et PollCat. Afghanistan, Égypte, Éthiopie. C’est sur des machines de ces trois pays que les échantillons ont été retrouvés. Node.js et JavaScript. C’est dans ces langages que les implants sont écrits, pour infecter Windows, Linux et macOS d’un même geste. Pourquoi c’est important : l’entretien d’embauche, et plus précisément son test de codage, est devenu un vecteur d’intrusion à part entière.

Le « défi technique » qui contient déjà l’implant

Le point de départ est un message de spear-phishing sur LinkedIn et d’autres plateformes d’emploi. Un individu se présentant comme un spécialiste de l’acquisition de talents d’une grande entreprise technologique approche un ingénieur logiciel et l’invite à réaliser un exercice technique. L’archive jointe, Front-Technical-Challenge.zip, est hébergée sur AWS.

À l’intérieur, le code source d’un outil de gestion de projet nommé Taskflow, accompagné d’une consigne : « trouvez et corrigez tous les bugs du code frontend », en trois heures, sans recourir à des outils d’intelligence artificielle. La consigne précise surtout une chose : ne pas modifier le composant serveur, server.js, présenté comme « exempt de bugs et fonctionnel ». C’est exactement là que le code malveillant est caché.

La première ligne de server.js importe un paquet npm trojanisé nommé colorized_terminal, en version 2.1.0. Le paquet n’est pas publié sur le registre npm : les attaquants l’ont embarqué directement dans le répertoire node_modules de l’archive. À l’import, il lance silencieusement un implant depuis node_modules/.cache/.320697f1/index.js, en processus détaché. L’analyse de Kaspersky est sans ambiguïté : l’exercice de recrutement est le cheval de Troie, et la dépendance embarquée est la charge utile.

Un RAT à 11 commandes piloté depuis Azure

L’implant, NodeRabbit, communique avec trois serveurs de commande et contrôle (C2) hébergés sur Azureplugplay.azurewebsites[.]net, rgbteller.azurewebsites[.]net et wslwebui.azurewebsites[.]net — à travers trois points d’API distincts. /api/rabbit/checkin enregistre l’agent et les informations de la machine ; /api/rabbit/task interroge les commandes à exécuter ; /api/rabbit/result renvoie les résultats.

Le RAT expose 11 commandes qui couvrent l’essentiel de l’espionnage de poste : collecter les informations d’hôte, lister les processus, exécuter des commandes shell arbitraires, énumérer les répertoires, lire un fichier par blocs en renvoyant les données en Base64, décoder du texte Base64 et l’écrire à un offset choisi, supprimer un fichier ou un répertoire récursivement, créer des répertoires, énumérer les adaptateurs réseau avec les adresses MAC, IP et les réglages DNS, et modifier l’intervalle de beacon.

Une capacité mérite d’être notée : NodeRabbit écrit un script Node.js encodé en Base64 dans un fichier .tmp au nom aléatoire, l’exécute, puis le supprime pour effacer les traces. Kaspersky a identifié deux variantes supplémentaires partageant la même lignée de code, retrouvées en Égypte et en Éthiopie. La première remplace colorized_terminal par un paquet nommé pretty-log, version 2.1.0, et s’auto-détruit si elle se trouve dans un environnement d’analyse ; la troisième utilise le même pretty-log mais des points d’API différents, /sdk/v2/ready, /sdk/v2/config et /sdk/v2/events.

La persistance qui imite des mises à jour légitimes

La persistance dépend du système d’exploitation, et c’est là que la campagne se veut discrète. Sur Windows, une clé de registre Run ; sur Linux, une entrée cron ; sur macOS, un launch agent. Les deux premières variantes déguisent ce mécanisme en mise à jour du navigateur Microsoft Edge ou en outil Intel Driver & Support Assistant.

La troisième variante va plus loin. Elle ne se fait passer pour aucun logiciel légitime, mais elle tient compte du Windows Subsystem for Linux (WSL) pour créer une tâche planifiée quotidienne à 10 h qui lance un script Visual Basic via wscript.exe et wsl.exe. Elle ajoute 12 nouvelles commandes, dont l’énumération des lettres de lecteur Windows et des montages WSL, l’exécution et l’arrêt de processus, le remplacement du serveur C2 actif, la collecte d’adresses de comptes depuis les artefacts Outlook (OST et PST), et l’installation d’une fausse extension VS Code nommée « GitHub Copilot Helper » pour consolider la persistance.

Cette campagne s’inscrit dans une accélération récente de l’arsenal du groupe, qui s’appuyait historiquement sur du C, du C++ et du Go avec du détournement d’ordre de recherche de DLL. En quelques mois, Nimbus Manticore a aussi aligné un backdoor Windows nommé NightLedger, deux tunnelers WebSocket (BridgeHead et ArcBridge), un outil de tunnel SSH inversé et un backdoor recoupant TWOSTROKE. Le groupe est également suivi sous le nom « Iranian Dream Job », en référence à une tactique de recrutement factice longtemps associée au groupe nord-coréen Lazarus : c’est la même idée, déplacée vers l’écosystème Node.js.

Ce que cela change pour les équipes qui recrutent

Le piège exploite un réflexe : un candidat motivé exécute un défi technique sur sa machine de travail, souvent sans réseau isolé, avec ses identifiants réels. Le code à auditer est fourni par l’attaquant, et le danger ne vient pas d’un bug évident mais d’une dépendance embarquée dans le node_modules livré. Un simple npm install ou npm start suffit à lancer l’implant, sans que le candidat ne lise jamais server.js.

La parade commence par un principe : traiter tout défi de recrutement non sollicité comme du code non fiable. Exécuter dans une machine virtuelle ou un conteneur jetable, sans accès réseau, et auditer les dépendances embarquées avant tout lancement.

bash
# Auditer un défi de recrutement avant de l’exécuter
# 1. Repérer les paquets présents dans node_modules mais absents du registre public
for p in node_modules/*/package.json; do
  name=$(grep -m1 '"name"' "$p" | cut -d'"' -f4)
  code=$(curl -s -o /dev/null -w "%{http_code}" "https://registry.npmjs.org/$name")
  echo "$code $name"
done
# 2. Chercher les exécutions détachées typiques d’un implant
grep -R "spawn\|detached\|\.cache" server.js node_modules/.cache 2>/dev/null

Le second réflexe, pour un responsable d’équipe, est de vérifier l’identité du recruteur hors canal : un appel sur un numéro officiel de l’entreprise annule la moitié du risque. Le troisième est de standardiser le processus de recrutement technique afin qu’aucun candidat ne reçoive d’archive exécutable depuis un expéditeur non vérifié.

Les signaux de compromission à chercher

Une campagne de ce type laisse des traces précises, et c’est là qu’un défenseur peut agir avant même de lire un rapport complet. Le premier signal est la présence, dans un dépôt de code ou une archive de défi, d’un paquet npm présent dans node_modules mais absent du registre public. C’est exactement la signature de colorized_terminal et de pretty-log, version 2.1.0, embarqués par les attaquants plutôt que publiés.

Le deuxième signal est réseau : les implants contactent des domaines hébergés sur azurewebsites.net, un suffixe légitime qui noie le trafic dans le bruit des services Azure légitimes. Les chemins d’API sont toutefois distinctifs : /api/rabbit/checkin, /api/rabbit/task et /api/rabbit/result pour NodeRabbit, et /sdk/v2/ready, /sdk/v2/config et /sdk/v2/events pour la troisième variante. Un blocage ou une alerte sur ces chemins, ou sur les trois domaines cités par Kaspersky, coupe la chaîne de commande et contrôle.

Le troisième signal est la persistance : une clé Run qui imite une mise à jour Microsoft Edge, une entrée cron Linux déguisée en Intel Driver & Support Assistant, ou une tâche planifiée WSL qui lance wscript.exe et wsl.exe à heure fixe. Ce sont des motifs inhabituels sur un poste de développeur, et ils méritent une revue plutôt qu’un classement automatique en bruit.

Verdict

Si vous recrutez des développeurs, standardisez l’envoi des tests techniques via une plateforme contrôlée, jamais par archive jointe, et imposez l’exécution en environnement jetable. Un défi reçu par LinkedIn depuis un inconnu doit être traité comme un échantillon de malware jusqu’à preuve du contraire.

Si vous êtes développeur en recherche, n’exécutez jamais un défi technique sur votre machine de travail, avec vos comptes connectés. Une VM sans réseau, ou un conteneur jetable, suffit pour l’exercice, et un coup d’œil au node_modules fourni avant tout npm install vous protège du cas colorized_terminal.

Si vous défendez un parc, ajoutez à vos détections la présence de paquets npm non publiés dans les dépôts de code, et surveillez les beacons vers des domaines Azure du type azurewebsites.net utilisés en C2. C’est un signal faible mais très discriminé dans une campagne comme celle-ci.

Références

Le brief cyber, chaque mardi

Les failles qui comptent, les correctifs à appliquer, en dix minutes de lecture.

Pas de spam. Désinscription en un clic.
à lire ensuite

Sur le même sujet

Des rançongiciels exploitent le RCE IKEv2 non authentifié des pare-feu WatchGuard Firebox

CISA a actualisé le 10 septembre 2026 sa fiche KEV pour confirmer que CVE-2025-14733, un RCE non authentifié du processus iked de WatchGuard Firebox corrigé en décembre 2025, sert désormais à des attaques par rançongiciel. Près de 9 000 Firebox restent exposés sur Internet : vérifiez la version de Fireware OS et traquez les indicateurs de compromission avant le chiffrement.

Le phishing déguisé en passkey vide les comptes Microsoft 365 des entreprises

Microsoft documente des attaques où des gangs liés à ShinyHunters et Helix se font passer pour le help desk afin d’amener des employés vers des sites de phishing passkey, puis exfiltrent les données Microsoft 365. La parade tient moins au passkey lui-même qu’à des méthodes d’authentification résistantes au phishing et à la révocation des sessions compromises.

← Retour au fil

Tapez au moins deux caractères.

naviguer ouvrir esc fermer