El incidente de LiteLLM representa un ataque sofisticado a la cadena de suministro, donde un atacante obtuvo credenciales de desarrolladores para comprometer el proceso de publicación de paquetes. La causa raíz fue el acceso no autorizado a las credenciales de GitHub CLI de tres desarrolladores, presuntamente obtenidas de logs de un despliegue interno de LiteLLM expuesto a internet. Con estas credenciales, el atacante pudo eludir las protecciones de rama y manipular el workflow de release, apuntando a un repositorio lookalike y obteniendo aprobación para publicar artefactos maliciosos.

La cascada de fallo se inició con la publicación de la versión 1.107.0 de LiteLLM en PyPI y Docker Hub, la cual contenía un 'credential stealer' (cook.py) y un 'backdoor' (sitecustomize.py). Estos archivos se instalaban en 'site-packages' y se ejecutaban con cada inicio de cualquier proceso Python en el host, incluso sin importar 'litellm'. El 'credential stealer' recolectaba una amplia gama de secretos (claves SSH, credenciales cloud, tokens de IA, contraseñas de navegador) y los exfiltraba. El 'backdoor' establecía un demonio persistente que cada hora descargaba y ejecutaba código arbitrario desde un servidor controlado por el atacante.

Las salvaguardas fallaron en múltiples niveles. Primero, la exposición de credenciales de desarrolladores en logs de un despliegue interno fue una vulnerabilidad crítica. Segundo, la capacidad del atacante para anular las protecciones de rama y obtener aprobación para un 'release' malicioso indica una debilidad en los controles de acceso y revisión del pipeline de CI/CD. Aunque PyPI y GitHub actuaron rápidamente para eliminar el contenido malicioso, el tiempo que las versiones comprometidas estuvieron disponibles permitió la infección de numerosos sistemas. La falta de validación de integridad del código fuente antes del build final, o la ausencia de un sistema de 'reproducible builds' que hubiera detectado la discrepancia entre el código fuente de GitHub y el paquete publicado, también contribuyeron al fallo.