CARBONATO convierte hosts Docker expuestos en una red de robo de credenciales asistida por IA
CARBONATO explota Docker expuesto en puerto 2375 para crear contenedores privilegiados, mantener acceso y robar credenciales con agente IA GH0ST.
Imagen ilustrativa generada con IA
Las API de Docker abiertas ofrecen el acceso inicial
CARBONATO es una botnet basada en Docker que combina técnicas convencionales de intrusión en servidores con un agente de IA de código abierto. Activa al menos desde octubre de 2024, la operación busca credenciales —en particular, claves de API de plataformas de IA— que puedan ayudar a financiar la pasarela de modelos de lenguaje grandes de los propios operadores.
La botnet apunta a daemons de Docker que aceptan conexiones sin autenticación en el puerto TCP 2375. En lugar de explotar una vulnerabilidad de software divulgada, CARBONATO aprovecha una configuración de implementación insegura que permite a clientes remotos acceder a la API de Docker.
No se han divulgado versiones concretas de Docker afectadas. La campaña no está asociada a ningún CVE ni figura en el catálogo de vulnerabilidades explotadas conocidas de CISA.
Tras identificar un daemon expuesto, los atacantes usan la API para crear un contenedor con privilegios y montar en él el sistema de archivos del host. Así, los comandos ejecutados desde el contenedor pueden afectar al servidor subyacente: al tomar el control de Docker, los atacantes se hacen con el del host.
Un equipo de investigadores que analizaba CARBONATO descubrió la operación al encontrar un registro de contenedores accesible desde Internet que no exigía autenticación. En una jornada de recopilación pasiva y de solo lectura, descargaron 4,3 GB de datos de imágenes correspondientes a 59 repositorios, 234 etiquetas y 605 blobs de archivos verificados.
El registro filtraba mucho más que imágenes de malware. El historial de configuración de las imágenes de Docker reveló direcciones de mando y control, tokens de bots y una contraseña que los operadores compartían para acceder a su pasarela de IA.
Los contenedores con privilegios permiten mantener el acceso al host
El componente inicial de CARBONATO es entry.sh versión 5.3, descrito como un script de primer nivel. Una vez en ejecución, crea un túnel SSH inverso desde la víctima hasta una infraestructura de retransmisión en Costa Rica.
El puerto remoto del túnel no se elige al azar. CARBONATO lo calcula a partir del hash MD5 de la dirección IP de la víctima, de modo que un operador que conozca esa dirección puede deducir el puerto al que se volverá a conectar.
El script también instala un servidor SSH y agrega una clave pública controlada por los operadores. Después, informa de la nueva intrusión a través de Telegram y envía el ID del contenedor, el nombre del host, la dirección IP y el país. Los mensajes de despliegue emplean el voseo, la forma regional que utiliza «vos».
Varios mecanismos ayudan al malware a sobrevivir a los reinicios y a los intentos de eliminación:
- tareas cron;
- temporizadores de systemd;
rc.local;- OpenRC;
- atributos de archivo inmutables que dificultan su eliminación o modificación.
Un componente de supervisión vigila la instalación. Si el contenedor malicioso desaparece, descarga el implante del registro expuesto y vuelve a desplegarlo.
CARBONATO también intenta que sus procesos parezcan rutinarios. El contenedor se llama systemd-resolved y un banner falso imita el resolvedor de systemd-networkd. Además, manipula los argumentos de los procesos para que se parezcan a los del hilo de trabajo del kernel [kworker/u2:0].
Estos disfraces pueden dificultar una revisión superficial de los procesos, pero no hacen que la actividad resulte indistinguible de la de servicios legítimos del sistema. Un contenedor con privilegios que monta el sistema de archivos del host, establece una conexión SSH inversa y se comunica con Telegram sigue siendo una pista importante para la investigación.
La propagación por la red no necesita un modelo de IA
Aunque la IA es fundamental para el sistema interactivo de comandos de CARBONATO, no interviene en la propagación de la botnet.
Cada cinco minutos, un script examina las redes conectadas al host infectado, incluidas las redes puente de Docker. Luego analiza los rangos de direcciones /24 cercanos en busca de sistemas que tengan un daemon de Docker expuesto en el puerto 2375.
Cuando encuentra un daemon accesible, CARBONATO comprueba si el objetivo ya está infectado. Si no lo está, despliega el mismo entorno malicioso a través de la API de Docker. La máquina recién comprometida empieza entonces a buscar otras víctimas.
Este mecanismo permite expandirse de forma reiterada sin necesidad de nuevas instrucciones por Telegram ni de comandos generados por un modelo. También puede hacer que una intrusión iniciada en un servidor expuesto se extienda a segmentos de red adyacentes accesibles desde ese host.
Las víctimas directas son administradores y organizaciones que ejecutan API de Docker sin autenticación. Sin embargo, las consecuencias van más allá de las cargas de trabajo en contenedores, ya que el montaje con privilegios da acceso al sistema de archivos del host y a los secretos almacenados localmente.
Hermes Agent se reutiliza mediante su archivo de personalidad
El implante instala Hermes Agent, un framework de código abierto con licencia MIT desarrollado por Nous Research. CARBONATO no modifica el código base del framework; en su lugar, cambia las instrucciones que definen el comportamiento del agente.
Los operadores sustituyen el contenido del archivo de personalidad SOUL.md por un prompt de 39 líneas y renombran el agente como «GH0ST». Las instrucciones le indican que actúe como herramienta de pos-explotación, ejecute las tareas recibidas por Telegram, mantenga el acceso y recopile credenciales.
Este diseño dificulta la detección basada únicamente en el inventario de software. Encontrar hermes-agent no demuestra que un servidor esté infectado, ya que el framework tiene usos legítimos. Los equipos de defensa deben revisar su configuración, las instrucciones de personalidad, los mecanismos de persistencia asociados y las comunicaciones.
La personalidad maliciosa prioriza las credenciales de servicios de IA por encima de las de SSH, los tokens de acceso generales y los secretos de bases de datos. Menciona específicamente 14 proveedores y tecnologías:
- OpenAI
- Anthropic
- Gemini
- OpenRouter
- Together
- Groq
- Mistral
- Cohere
- LocalAI
- Ollama
- vLLM
- LiteLLM
- One API
Se informó de que la pasarela LLM de los operadores estaba en línea el 3 de septiembre y funcionaba con un plan gratuito. Anunciaba 12 modelos y ofrecía 27 a través de su API.
En el flujo operativo de CARBONATO, el atacante envía una tarea por Telegram. Hermes reenvía la solicitud y la personalidad maliciosa de SOUL.md a la pasarela. El modelo seleccionado genera comandos de terminal, revisa sus resultados y decide los pasos siguientes. Las respuestas vuelven al mismo chat de Telegram que se usa para las notificaciones de despliegue.
Así, el modelo proporciona una interfaz de comandos adaptable. Puede responder a las diferencias entre sistemas comprometidos sin que los operadores tengan que crear scripts específicos para cada host. El operador humano sigue iniciando las tareas, mientras que el LLM traduce esos objetivos en comandos y acciones posteriores.
Las claves de IA robadas ayudan a financiar nuevas operaciones
El interés de CARBONATO por las credenciales de IA añade a la campaña una dimensión de autofinanciación. Las claves de API robadas pueden cargar a las víctimas el coste del uso de modelos y, al mismo tiempo, permitir que la botnet siga accediendo a servicios externos de inferencia.
Según el servicio y los permisos asociados a la credencial, una clave comprometida también puede revelar información sobre el uso de la cuenta, sus cuotas o las aplicaciones conectadas. Se desconoce el número exacto de claves robadas y de organizaciones afectadas.
La operación plantea varios riesgos simultáneos: acceso remoto persistente, ejecución de comandos con privilegios, robo de distintos tipos de credenciales, propagación automatizada por la red y pos-explotación asistida por modelos. No se le ha asignado una clasificación formal de gravedad.
El registro expuesto desempeña dos funciones: distribuye el implante a los hosts infectados y, debido a sus controles de acceso deficientes, filtró datos operativos que ayudaron a revelar la campaña.
Hay indicios de una posible conexión con Costa Rica, aunque no demuestran la ubicación física de los operadores. Catorce de las 162 configuraciones de imágenes examinadas contenían marcas de tiempo UTC-06:00, compatibles con la zona horaria de Costa Rica. El identificador de Telegram Carbo506 incluye el prefijo telefónico +506 del país, y las conexiones SSH inversas terminaban en AS262145, una red costarricense.
El uso del voseo aporta una pista lingüística. Ninguno de estos indicios es concluyente y la infraestructura situada en Costa Rica podría estar controlada a distancia desde otro país.
Qué deben revisar y proteger los administradores
La principal medida de defensa es impedir el acceso a la API del daemon de Docker desde redes no autenticadas. El puerto 2375 no debe quedar expuesto a redes no confiables y el acceso debe restringirse a sistemas autorizados.
Los registros de contenedores también necesitan autenticación y una exposición de red limitada. Un registro abierto puede revelar secretos integrados, el historial de las imágenes, herramientas internas y componentes de malware listos para desplegarse.
Los equipos de defensa que investiguen posibles infecciones de CARBONATO deben buscar:
/root/.hermes/SOUL.mdcon el nombreGH0ST;- archivos
.envque contenganCARBONATO_API_KEY; - tráfico saliente de Telegram desde servidores sin una explicación clara;
- contenedores con privilegios llamados
systemd-resolved; - conexiones SSH inversas que no respondan a una necesidad administrativa autorizada;
- claves SSH, entradas cron, temporizadores de systemd o cambios en
rc.localy mecanismos de persistencia de OpenRC inesperados; - archivos marcados como inmutables sin una justificación operativa documentada;
- análisis recurrentes del puerto TCP 2375 en las redes locales
/24.
Los administradores no deben bloquear Hermes Agent solo por estar instalado. La investigación debe centrarse en el contenido malicioso de la personalidad y en las actividades asociadas.
Las organizaciones también deben inventariar las claves de API de IA almacenadas en su infraestructura, rotar las credenciales expuestas o de origen desconocido y supervisar su uso posterior. En esta campaña, esas claves no son hallazgos circunstanciales: son un objetivo prioritario y un recurso destinado a mantener las operaciones de la botnet asistidas por IA.
Fuentes
Este artículo es una reelaboración original basada en las siguientes fuentes.
