Introducción
La integridad de los artefactos de software open-source sigue siendo el eslabón más débil en la cadena de suministro moderna. El reciente incidente con LiteLLM, un SDK de Python ampliamente utilizado para interfaces con modelos de IA, demuestra cómo la vulnerabilidad no reside necesariamente en el código de la aplicación, sino en el proceso de construcción y publicación (CI/CD). Al comprometer el pipeline de liberación, un atacante logró inyectar carga maliciosa en paquetes PyPI y imágenes Docker oficiales sin modificar la lógica funcional del proyecto.
Este evento es crítico para equipos de DevOps e Infraestructura porque LiteLLM no es una biblioteca marginal; cuenta con 92 millones de descargas mensuales y es utilizada por gigantes tecnológicos como NVIDIA, Netflix y AT&T. La naturaleza del malware, diseñado para exfiltrar credenciales y variables de entorno, convierte cualquier sistema que haya instalado la versión comprometida en una puerta trasera activa, independientemente de si la aplicación principal funciona correctamente.
Qué ocurrió
El 21 de octubre, el equipo de mantenimiento de LiteLLM reportó una brecha en su pipeline de liberación. Un actor de amenazas, cuyo origen específico no se detalla públicamente pero que comparte tácticas con grupos como TeamPCP (responsables de un ataque similar en marzo), logró publicar la versión 1.107.0 tanto en el registro de PyPI como en el registro de Docker. Esta versión contenía código malicioso compilado diseñado para robar credenciales y habilitar la ejecución remota de código.
A diferencia de los ataques típicos que requieren que el usuario llame a funciones específicas de la biblioteca, este malware se activaba automáticamente. Los investigadores de seguridad de Socket y Endor Labs identificaron que los atacantes no alteraron el código fuente de LiteLLM. En su lugar, modificaron el paquete de instalación para incluir tres archivos específicos en el directorio de librerías de Python: cook.pth, cook.py y sitecustomize.py. Esta técnica aprovecha el comportamiento nativo del intérprete de Python, que procesa archivos .pth y importa sitecustomize durante el arranque, garantizando que la carga maliciosa se ejecute incluso antes de que la aplicación inicie o se ejecute cualquier comando de depuración como pip.
Impacto para DevOps / Infraestructura / Cloud / Seguridad
El impacto operativo es amplio y crítico, dado que LiteLLM es un componente central en arquitecturas de IA generativa. La versión 1.107.0 afectó a todas las plataformas: Windows, Linux y macOS. Para los equipos de Infraestructura y Cloud, el riesgo principal radica en la exfiltración de secretos. El malware estaba diseñado para robar credenciales de acceso, claves API y variables de entorno, elementos que en entornos de producción suelen contener accesos a AWS, bases de datos, servicios de IA y sistemas de monitoreo.
La velocidad de detección fue rápida por parte de las firmas de seguridad (seis minutos tras la publicación), pero insuficiente para evitar la instalación masiva. Dado el volumen de descargas, el número de sistemas comprometidos potencialmente es alto. Los entornos que utilizan Docker deben prestar especial atención, ya que las imágenes oficiales contaminadas podrían haber sido desplegadas en clusters Kubernetes o servicios de computación elástica antes de que se retiraran. La presencia de malware que carga herramientas de ejecución remota significa que los atacantes podrían haber establecido persistencia, permitiendo movimiento lateral dentro de redes internas si las máquinas comprometidas tienen acceso a otros recursos.
Además, el ataque resalta la fragilidad de los pipelines CI/CD. Si un atacante puede comprometer la cuenta de publicación o el token de autenticación del pipeline, puede distribuir malware a millones de usuarios downstream sin que los desarrolladores finales detecten cambios en el código fuente en GitHub. Esto invalida las suposiciones de seguridad basadas únicamente en la revisión de código abierto.
Detalles técnicos
El vector de ataque se centró en la manipulación del paquete de distribución wheel (.whl) de LiteLLM versión 1.107.0. Los archivos inyectados (cook.pth, cook.py, sitecustomize.py) siguen un patrón conocido de «living off the land» en ecosistemas Python. Al colocar sitecustomize.py en la ruta de búsqueda de Python, el intérprete importa este módulo automáticamente al iniciar, ejecutando el código malicioso en cada proceso Python, incluyendo aquellos utilizados para mantenimiento o diagnóstico.
El payload robaba datos sensibles y los cifraba antes de la exfiltración. Utilizaba una clave AES-256-CBC para cifrar la información robada, la cual a su vez estaba cifrada con una clave RSA-4096. Los datos exfiltrados se enviaban a un endpoint controlado por el atacante: litellm[.]dev/healthcheck. Esta ruta de exfiltración imita tráfico legítimo de salud de servicios, dificultando la detección por parte de firewalls tradicionales o sistemas de detección de intrusiones basados en firmas simples.
Un componente adicional del malware era un loader persistente implementado en sitecustomize.py. Este loader lanzaba un proceso en segundo plano (detached) que verificaba un «puntero» alojado en GitHub cada hora. Si el puntero cambiaba, el loader descargaba nuevo código Python desde un servidor externo y lo ejecutaba en el host. Esto proporcionaba al atacante un mecanismo de actualización remota y ejecución de comandos arbitrarios, transformando la infección inicial en una puerta trasera flexible.
Las versiones anteriores, específicamente la 1.106.2, permanecen limpias. Las imágenes de Docker y los paquetes PyPI de la versión 1.107.0 han sido retirados de los registros oficiales, pero los sistemas que ya los han instalado o desplegado siguen comprometidos.
Qué deberían hacer los administradores y equipos técnicos
La respuesta inmediata requiere aislamiento y limpieza profunda, no solo desinstalación. Si cualquier sistema en su infraestructura ha instalado LiteLLM versión 1.107.0, debe considerarse comprometido.
Comandos útiles para verificar la presencia de artefactos maliciosos (ejecutar en entorno controlado o sistema ya reconstruido para asegurar limpieza):
# Buscar archivos específicos del malware en rutas de Python
find /usr/lib/python3*/site-packages -name «cook.pth» -o -name «cook.py» -o -name «sitecustomize.py»
find /usr/local/lib/python3*/site-packages -name «cook.pth» -o -name «cook.py» -o -name «sitecustomize.py»
# Verificar versiones instaladas de LiteLLM
pip list | grep litellm
Conclusión
El compromiso de LiteLLM subraya que la confianza en los repositorios de paquetes y pipelines de CI/CD no debe ser absoluta. La velocidad de propagación de este incidente, combinada con la sofisticación de usar mecanismos de carga nativos de Python, exige que los equipos de seguridad y DevOps implementen controles de cadena de suministro más estrictos. La reliance en la «seguridad por reputación» de un proyecto open-source popular es una estrategia insuficiente. La verificación de integridad, la rotación proactiva de secretos y la capacidad de reconstrucción rápida de infraestructuras son ahora requisitos mínimos para operar en entornos cloud modernos.
Fuentes
https://www.bleepingcomputer.com/news/security/litellm-release-pipeline-hacked-to-distribute-info-stealer-malware/
