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.

  • Aislar y Evitar Ejecución de Python: No inicie el intérprete de Python en los sistemas sospechosos para inspección, ya que esto activará el malware. Utilice herramientas de análisis estático o entornos limpios para examinar el sistema de archivos.
  • Rebuild desde Backups Limpios: La eliminación del paquete LiteLLM no es suficiente. El malware deja archivos de inicio y procesos de carga activos. La única forma segura de remediar la infección es reconstruir los sistemas desde backups previos al 21 de octubre o desde imágenes base limpias.
  • Rotación de Secretos: Asuma que todas las credenciales, claves API (OpenAI, AWS, Azure, etc.) y variables de entorno presentes en los sistemas afectados han sido robadas. Rotar estas credenciales inmediatamente es obligatorio. Esto incluye revisar logs de acceso a servicios cloud para detectar actividad anómala desde las IPs de los sistemas comprometidos.
  • Verificación de Integridad: Para instalaciones futuras, utilice herramientas de verificación de hashes y firma de paquetes. En Python, considere usar pip –require-hashes para asegurar que los paquetes instalados coincidan exactamente con los hashes publicados por fuentes confiables.
  • Actualización Segura: Si necesita LiteLLM, instale la versión 1.106.2, que es la última versión limpia conocida. Verifique que no existan archivos cook.pth o sitecustomize.py extraños en los directorios de librerías de Python (site-packages) después de la instalación.
  • 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/

    Deja una respuesta

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