La botnet PoeLLM esconde su C2 en un poema de GitHub
Una botnet de criptominería que se cuela en servidores de IA expuestos localiza su infraestructura de mando y control (C2) leyendo un poema alojado en GitHub, según los investigadores de Black Lotus Labs.
Los investigadores han bautizado el malware como PoeLLM. Desde abril de 2026 ha comprometido más de 3.400 servidores, la mayoría en EE. UU. y Europa occidental. Black Lotus Labs sigue esta actividad bajo el nombre de Canto Incognito y atribuye la campaña a un actor de amenazas de habla italiana que parece moverse por motivos económicos.
Los servicios de IA, en el punto de mira
La mayoría de las máquinas infectadas ejecutan versiones vulnerables de servicios de código abierto de IA y de modelos de lenguaje de gran tamaño (LLM), como LiteLLM y Ollama. El malware también ha alcanzado a cientos de servidores con Gotenberg, un conversor de PDF de código abierto, y Gitea, un conjunto de herramientas para el desarrollo de software.
Según los investigadores, los atacantes tienen dos motivos para ir a por servidores que ejecutan implementaciones de IA/LLM. Estos servidores pueden ser una fuente de información de inteligencia. Además, son servicios autoalojados que están expuestos a internet y tienen vulnerabilidades conocidas.
Una pista de Ivanti
Black Lotus Labs dio con PoeLLM mientras investigaba CVE-2026-10520, una vulnerabilidad en Ivanti Sentry. A principios de junio de 2026, un dispositivo Ivanti Sentry comprometido se conectó a un servidor dedicado en 5.78.73[.]122. Poco después empezó a buscar otros sistemas vulnerables.
La telemetría del equipo mostró que el primer commit en GitHub con el poema se realizó el 13 de abril. El tráfico inicial del primer C2 conocido apuntaba a que el operador había probado brevemente las infecciones y la descarga de cargas útiles.
A partir de mayo, el atacante rastreó internet sobre todo en busca de los puertos 3000 y 4000, los puertos por defecto de Gotenberg y LiteLLM. Cuando el rastreo encontraba un servidor vulnerable, un servidor de explotación le enviaba una petición POST manipulada que le ordenaba descargar un archivo desde el C2. En la muestra que analizaron los investigadores, el endpoint de LiteLLM atacado (/mcp-rest/test/connection) aparece en CVE-2026-42271, un fallo de inyección de comandos en LiteLLM.
Cuatro palabras, una dirección IP
El poema se titula "On the Nature of Connection". Se encuentra en un archivo llamado dash.css dentro de un repositorio de GitHub creado por un usuario llamado "ejejejdfbbebe". El repositorio es un fork del código fuente de la web nodejs.org, aunque el malware no tiene ninguna relación con Node.js.
PoeLLM toma cuatro palabras de posiciones fijas del poema. Busca cada una de ellas en un diccionario integrado en el código del malware, que le asigna un número. Los cuatro números forman la dirección IPv4 del servidor C2 activo. En una versión anterior del poema, las palabras "driver", "diode", "decryption" y "string" se traducían en 92, 119, 165 y 74, lo que dirigía a los bots a 92.119.165.74.
Para trasladar la botnet a un nuevo servidor, al operador le basta con cambiar esas cuatro palabras en el repositorio. Las máquinas infectadas calculan después la nueva dirección por su cuenta. El poema se ha editado 11 veces desde el primer commit, y cada edición ha redirigido a las víctimas a un servidor distinto.
"En el momento de escribir esto, el creador del malware no ha cambiado el patrón utilizado para descifrar el poema. Solo han cambiado las palabras clave a lo largo de las 11 iteraciones que hemos observado", señalan los investigadores.
Primero minar, luego propagarse
Una vez instalado, PoeLLM ejecuta los mineros de criptomonedas XMRig e Iron y conecta a las víctimas con el pool de minería ruso Kryptex. También incluye una shell remota, funciones de rastreo HTTP/S y de despliegue de exploits. La botnet crece poniendo a los servidores infectados a buscar y explotar nuevos objetivos.
Más recientemente, grupos de bots han empezado a atacar puertos SSH y otros portales de inicio de sesión. Según los investigadores, esto sugiere que el operador podría estar experimentando con ataques distribuidos de fuerza bruta. Esa capacidad parece encontrarse en una fase temprana de desarrollo.
Black Lotus Labs asegura que ha bloqueado el tráfico hacia y desde los servidores C2 de PoeLLM y que seguirá vigilando la aparición de nuevo tráfico.
"Los retrasos en la actualización de las herramientas empresariales y de IA expuestas a internet permiten un acceso con un alto nivel de confianza", escribieron los investigadores. Añadieron que las herramientas de IA deben incluirse en la gestión de la superficie de ataque y en los ciclos de parcheo. En su opinión, esto protege frente al abuso de tokens y la criptominería y, lo que es más grave, frente a la pérdida de datos, el LLM jacking y el movimiento lateral.
Nuestro análisis
El truco del poema es ingenioso, pero el problema de fondo es de sobra conocido. Las organizaciones ponen en marcha servicios de IA autoalojados más rápido de lo que los parchean. PoeLLM no necesitó ningún zero-day: rastreó puertos por defecto y explotó fallos conocidos en herramientas como LiteLLM. Encaja en una tendencia más amplia por la que la infraestructura de IA se ha convertido en una superficie de ataque por derecho propio, desde fallos en componentes de pasarelas de IA hasta encuestas que sitúan los ataques a sistemas de IA entre las mayores carencias de preparación de las empresas.
Esconder datos del C2 en GitHub también demuestra cómo los atacantes se apoyan en plataformas de confianza que los defensores rara vez bloquean. Campañas recientes como la de los repositorios maliciosos de FakeGit van en la misma dirección. Como el patrón de descodificación se ha mantenido igual a lo largo de 11 ediciones, los defensores disponen por ahora de una forma fiable de seguir la pista al operador. Habrá que ver si cambia el esquema ahora que se ha hecho público y si la incipiente actividad de fuerza bruta acaba convirtiéndose en algo más serio. Los equipos que utilicen LiteLLM, Ollama, Gotenberg o Gitea deberían revisar ya su exposición y su nivel de parches.
