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é.
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.
# 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-resolvedqui 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
/etcou/usr/local/bin. - Artéfacts Hermes Agent : le binaire de l’agent, un fichier
SOUL.mddont 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
- ThreatDown — CARBONATO: a botnet built around an AI agent (22 septembre 2026)
- The Hacker News — Carbonato Botnet Compromises Docker Hosts to Deploy Telegram-Controlled Hermes AI Agent (28 septembre 2026)
- Cloud Security Alliance — Carbonato: Telegram-Controlled AI Agent Hijacks Docker Hosts (28 septembre 2026)