El pipeline de publicación de LiteLLM fue comprometido para distribuir malware ladrón de información

El proyecto LiteLLM sufrió un ataque a la cadena de suministro después de que intrusos comprometieran su pipeline de publicación y distribuyeran la versión 1.107.0 con código malicioso a través de PyPI y registros de contenedores. La carga útil instalada roba credenciales, secretos y variables de entorno en sistemas Windows, Linux y macOS.

LiteLLM es un SDK de Python y puerta de enlace de IA de código abierto que permite a las aplicaciones acceder a modelos de distintos proveedores mediante una API común. Cuenta con 61.800 estrellas en GitHub y 92 millones de descargas mensuales en PyPI, y lo utilizan empresas como NVIDIA, Netflix, AT&T y Okta.

Alcance de la intrusión

Según el mantenedor del proyecto, el pipeline fue comprometido el 21 de octubre y un actor de amenazas publicó la versión 1.107.0 tanto en el registro de Docker como en PyPI. Esa versión incluía malware compilado que sustrae credenciales y carga herramientas de ejecución remota de código. Los clientes de la edición empresarial privada no se vieron afectados.

El análisis posterior del incidente identifica los siguientes artefactos comprometidos:

  • PyPI: litellm==1.107.0, las siete ruedas de instalación, disponibles entre las 11:39:51 y las 13:23 UTC.
  • Docker Hub: v1.107.0, latest, main-latest y main-stable, apuntando al índice de imagen comprometido sha256:1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339e entre las 11:46:56 y las 14:20 UTC.
  • GHCR: v1.107.0, latest, main-latest y main-stable, apuntando a los índices comprometidos desde las 11:46:56 UTC hasta que quedaron inaccesibles a las 13:51 UTC.
  • ghcr.io/berriai/litellm con el índice sha256:1bbcb1443bc9…
  • ghcr.io/berriai/litellm-database con el índice sha256:c00f9d92c427…
  • ghcr.io/berriai/litellm-non_root con el índice sha256:7b00e91cd2fe…

Técnica de persistencia

Varias empresas de seguridad de aplicaciones detectaron el ataque en los seis minutos siguientes a la publicación de la versión maliciosa y analizaron la carga útil. Los investigadores señalan que el atacante no modificó el código de la aplicación: solo alteró el paquete de instalación para colocar tres archivos maliciosos (cook.pth, cook.py y sitecustomize.py) en el directorio de bibliotecas de Python del entorno.

Los expertos de Socket explican que, durante el arranque normal, Python procesa las líneas ejecutables de los archivos .pth y después intenta importar sitecustomize. Endor Labs añade que, de este modo, las cargas útiles se ejecutan antes que la aplicación cada vez que se inicia Python en el entorno. Incluso ejecutar Python o pip para investigar una instalación afectada activaba el malware.

Datos exfiltrados

El malware estaba diseñado para recopilar las siguientes categorías de información:

  • Credenciales de nube y despliegue: secretos de AWS, Azure, Google Cloud, Kubernetes, Docker y herramientas de gestión de infraestructura.
  • Credenciales y configuración de IA: archivos de autenticación de herramientas de desarrollo de IA, además de las credenciales de proveedores y la configuración de modelos almacenadas por LiteLLM.
  • Secretos de desarrollador y claves privadas: credenciales de Git, GitHub, npm, PyPI y CI/CD; archivos .env; claves SSH, GPG y TLS.
  • Datos de navegador: bases de datos de inicios de sesión guardados, cookies, autocompletado y pagos, e historial de navegación.
  • Datos del host y del entorno de ejecución: variables de entorno, historiales de shell y de aplicaciones, e información del sistema y de la red.

La información robada se cifra con una clave AES-256-CBC que a su vez va cifrada con una clave RSA-4096 y se envía a litellm[.]dev/healthcheck. Uno de los archivos maliciosos, sitecustomize.py, lanza un cargador independiente que consulta cada hora un puntero alojado en GitHub y descarga Python desde un servidor externo para ejecutarlo en el host.

Recomendaciones de recuperación

Los paquetes maliciosos ya han sido retirados, pero los usuarios potencialmente afectados deben detener los despliegues comprometidos e inspeccionar los entornos sin lanzar el intérprete de Python. Los sistemas infectados deben aislarse y reconstruirse a partir de copias de seguridad limpias, y todos los secretos expuestos deben rotarse de inmediato.

Eliminar únicamente el directorio del paquete LiteLLM puede dejar atrás archivos de arranque o un cargador activo. La versión recomendada para recuperarse es LiteLLM 1.106.2, la última publicación limpia anterior al ataque.

El proyecto ya había sufrido otra brecha en marzo, cuando el grupo de piratería TeamPCP publicó versiones maliciosas de LiteLLM en PyPI tras comprometer el escáner de vulnerabilidades Trivy de Aqua Security, utilizado en el pipeline de CI/CD de LiteLLM.

Contexto adicional

El informe Blue Report 2026, basado en 338 millones de simulaciones en entornos de producción de clientes, señala que las puntuaciones globales de prevención pueden ocultar lo que ocurre después del acceso inicial: cuando los atacantes usan credenciales válidas, la prevención cae drásticamente y solo se bloquea el 37 % de sus acciones.

article image
article image

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *