EN
en direct

Le botnet Carbonato transforme les démons Docker exposés en agents IA pilotés par Telegram

Des chercheurs de ThreatDown ont reconstitué le botnet Carbonato, qui compromet les démons Docker exposés sur le port 2375 puis installe le framework open source Hermes Agent avec un simple fichier de persona réécrit. Fermez le port 2375, repassez en rootless ou en TLS, et révoquez toute clé d’API d’IA présente sur un hôte potentiellement touché.

Une rangée de conteneurs maritimes identiques dans un terminal portuaire plongé dans le noir, l’un d’eux entrouvert laissant filtrer une fine lueur ambre.

Août 2026. Les chercheurs de ThreatDown (la division B2B de Malwarebytes) découvrent, au fil d’une chasse de routine, un registre Docker non authentifié exposé publiquement depuis mai 2026. Septembre 2026. Ils en publient l’analyse, reprise par The Hacker News le 28 septembre 2026. Pourquoi c’est important : le registre documente un botnet dont le canal de commande n’est plus un script statique, mais un agent IA open source installé tel quel — seul son fichier de persona a été remplacé par les instructions de l’attaquant.

Une fuite de registre qui documente deux ans d’opérations

En une seule journée de collecte passive en lecture seule, l’équipe a récupéré 59 dépôts, 234 tags d’images, 605 blobs vérifiés par SHA-256 et 4,3 Go de données d’image. L’archive s’étend d’octobre 2024 à août 2026, et documente deux lignes de produits liées entre elles : une usine d’applications de portefeuille crypto trojanisées, et un botnet qui compromet les démons Docker exposés sur le port 2375.

Le registre lui-même était à la fois la source des preuves et le serveur de mise à jour de la flotte. Les hôtes infectés revenaient y tirer l’implant, ce qui a permis aux chercheurs de reconstituer les adresses C2, les jetons de bot, et le mot de passe partagé de la passerelle LLM de l’opération.

Trois étapes : prendre l’hôte, le tenir, installer l’agent

Le point d’entrée est une mauvaise configuration que les scanners internet signalent depuis des années : un démon Docker qui accepte des connexions non authentifiées sur le port 2375. Le botnet en tire un conteneur privilégié avec le système de fichiers de l’hôte monté en /host, et les espaces de noms PID et réseau de l’hôte partagés. Il exécute ensuite ses commandes sur l’hôte lui-même via nsenter à travers l’API exec de Docker.

bash
# 1. créer un conteneur privilégié avec le système de fichiers de l’hôte monté
curl -s -X POST "http://<victime>:2375/containers/create?name=netns-probe" \
  -H "Content-Type: application/json" -d '{"Image":"alpine:latest",
  "Cmd":["sh","-c","sleep 9999"],"HostConfig":{"Privileged":true,
  "Binds":["/:/host"],"PidMode":"host","NetworkMode":"host"}}'
# 2. l’exécuter sur l’hôte via nsenter à travers l’API exec de Docker
curl -s -X POST "http://<victime>:2375/containers/<id>/exec" \
  -H "Content-Type: application/json" -d '{"Cmd":["nsenter","-t","1",
  "-m","-u","-n","-i","sh","-c","id"],"AttachStdout":true,"AttachStderr":true}'

Une fois l’accès obtenu, le script entry.sh ouvre un tunnel SSH inversé vers un relais au Costa Rica, dont le port distant est dérivé du hash MD5 de l’IP de la victime. La persistance mobilise cron, les timers systemd, rc.local et OpenRC, avec des fichiers marqués immutables et des watchdogs qui re-tirent l’implant si ses fichiers ou son conteneur disparaissent. Pour se fondre dans une revue rapide, l’implant se fait passer pour un conteneur systemd-resolved et imite l’argument de processus [kworker/u2:0].

Hermes Agent installé tel quel, seul le persona change

La partie la plus frappante est l’installation de l’agent. Le botnet déploie Hermes Agent, un framework open source sous licence MIT développé par Nous Research, sans le modifier. Ce framework accepte déjà des tâches via Telegram, exécute des commandes terminal et se connecte à des points d’accès LLM compatibles. Le seul changement opéré par l’attaquant est l’écrasement du fichier SOUL.md, le persona de l’agent, remplacé par un prompt de 39 lignes.

Ce prompt rebaptise l’agent GH0ST, lui ordonne de maintenir la persistance, de répondre sur Telegram et d’exécuter toute opération demandée. Sa priorité de butin est explicite : les clés d’API d’IA arrivent avant les identifiants SSH, les jetons d’accès et les bases de données. Le prompt nomme quatorze fournisseurs — OpenAI, Anthropic, Google, Gemini, OpenRouter, Together, Groq, Mistral, Cohere, LocalAI, Ollama, vLLM, LiteLLM et One API — et exige l’exfiltration immédiate de toute clé LLM.

Le botnet se propage comme un ver : toutes les cinq minutes, il scanne les réseaux voisins et les ponts Docker à la recherche d’autres hôtes exposant le port 2375. Les nouveaux hôtes reçoivent l’implant et recommencent à scanner. Cette propagation ne dépend pas de l’agent IA, ce qui rend la portée du réseau indépendante du bon vouloir du modèle.

L’autre produit de la fabrique : wallets crypto et minage déguisé

Le registre fuité documente une seconde ligne de produits, servie par la même infrastructure. Des dépôts comme fsociety/xmrig montrent que l’opération distribuait aussi des portefeuilles de cryptomonnaie trojanisés et un mineur XMRig déguisé en service système systemd-logind. Le mot de passe partagé carbonato125, retrouvé en clair dans l’archive, et la variable CARBONATO_API_KEY sur les hôtes infectés relient l’ensemble à une chaîne de production unique.

Le rapport de déploiement envoyé sur Telegram — identifiant du conteneur, nom d’hôte, adresse IP et pays — est rédigé en espagnol voseo, une variante associée à certaines régions d’Amérique centrale et du Sud. La passerelle LLM partagée, dont le mot de passe a fuité, referme la boucle : l’agent reçoit ses instructions par Telegram, les exécute via le modèle, et rapporte ses résultats au canal de commandement. L’ensemble dessine une usine de construction d’images capable de produire, à la demande, un leurre de wallet ou un implant de botnet.

Indices à chercher sur un hôte suspect

La détection repose sur un faisceau d’indices plutôt que sur une signature unique. Sur un hôte suspect, cherchez trois choses :

  • Conteneurs privilégiés non attendus, en particulier un conteneur nommé systemd-resolved qui n’existe pas dans vos déploiements standard.
  • Tunnels SSH inversés sortants vers des hôtes inhabituels, et des fichiers marqués immutables sous /etc ou /usr/local/bin.
  • Artéfacts Hermes Agent : le binaire de l’agent, un fichier SOUL.md dont le contenu ne correspond pas à vos personas, et des watchdogs qui re-tirent une image depuis un registre externe.

Le signal le plus rentable reste le plus simple : surveillez l’exposition de votre port 2375 et de votre registre Docker vers internet. Carbonato n’a besoin de rien d’autre pour entrer, et la fermeture de ce seul accès coupe la chaîne d’infection à sa racine.

Ce que ça change pour la défense

Carbonato illustre un basculement concret : un framework d’agent légitime devient l’interface opérateur d’un botnet sans qu’une seule ligne de son code soit modifiée. La malice ne vit plus dans le binaire, mais dans le persona que l’on injecte au démarrage. Pour qui déploie des agents IA en production, la leçon est simple : tout framework d’agent sur un hôte compromis doit être considéré comme co-optable.

L’autre enseignement tient à la hygiène des secrets. Le prompt place les clés d’API d’IA au sommet de la liste, parce qu’elles monétisent directement l’accès à des modèles coûteux et se revendent facilement. Une clé LLM laissée dans une variable d’environnement sur un hôte mal protégé est désormais une cible de premier rang, au même titre qu’un mot de passe SSH.

Enfin, la cause racine reste la même depuis des années : exposer un démon Docker sur 2375 sans authentification revient à donner root à distance. Des milliers de ces hôtes demeurent joignables publiquement, et ce sont eux que le botnet a trouvés en premier.

Verdict

Si un seul de vos hôtes expose le démon Docker sur 2375, fermez-le tout de suite — c’est le vecteur d’entrée unique de Carbonato, et il se corrige en une ligne de pare-feu, un VPN ou l’authentification TLS native de Docker. Si vous faites tourner des conteneurs privilégiés, repassez en rootless et réservez Privileged aux cas documentés, car c’est exactement le levier qu’utilise l’implant pour sortir du conteneur. Et si un hôte a pu être touché, révoquez en priorité les clés d’API d’IA et faites tourner les identifiants SSH et jetons, puis cherchez les traces d’Hermes Agent, le persona SOUL.md modifié et les watchdogs qui re-tirent l’image — un simple rm ne suffit pas, la persistance est conçue pour survivre au nettoyage.

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

Un soldat américain condamné à 70 mois pour avoir extorqué dix opérateurs télécoms

Le 28 septembre 2026, Cameron John Wagenius, alias kiberphant0m, a été condamné à 70 mois de prison pour avoir piraté et extorqué au moins dix entreprises technologiques et télécoms depuis sa base militaire. L’affaire rappelle que la menace intérieure et le brute-force SSH restent un chemin d’entrée aussi efficace qu’un exploit zero-day.

← Retour au fil

Tapez au moins deux caractères.

↑ ↓ naviguer ↵ ouvrir esc fermer