Ataque a la Cadena de Suministro en LiteLLM v1.107.0: Tokens OAuth de GitHub CLI Robados, Fork Malicioso y el RAT de Inicio cook.pth en Python
Dado que LiteLLM actúa como la pasarela central de modelos de lenguaje (LLM) y SDK unificado de Python para miles de empresas —enrutando llamadas hacia OpenAI, Anthropic, Google Vertex AI y AWS Bedrock—, comprometer una instancia de LiteLLM equivale a capturar la bóveda maestra de credenciales de IA y nube de una organización. Durante el fin de semana, los informes forenses de LiteLLM (BerriAI) y Datadog Security Labs revelaron la anatomía completa del ataque a la cadena de suministro en LiteLLM v1.107.0: un secuestro quirúrgico de CI/CD ejecutado con tres tokens OAuth robados de GitHub CLI, un fork malicioso diferenciado por un solo guion y un hook de configuración de rutas de Python (cook.pth) que ejecuta malware en el instante en que se invoca cualquier comando de Python en el sistema.

Etapa 1: Cómo Tres Tokens OAuth de gh Burlaron las Protecciones de Despliegue
El flujo de publicación de LiteLLM utilizaba GitHub Actions protegido por aprobaciones de entorno multiusuario. Para eludir estos controles sin modificar directamente el código del repositorio legítimo BerriAI/litellm, los atacantes utilizaron tokens OAuth de GitHub CLI (gh) previamente robados a tres ingenieros distintos del proyecto:
- El Truco del Fork con Guion (Token #1): Los atacantes prepararon el código malicioso en un fork externo llamado
Berri-AI/litellm(nótese el guion adicional). Con el Token #1, dispararon el workflow oficial de publicación indicando que descargara y compilara el árbol de código desde dicho fork. - Aprobación del Entorno de Producción (Token #2): Con el Token #2, aprobaron la compuerta de revisión del entorno de despliegue a las 11:39 UTC del 21 de octubre de 2026, publicando
litellm==1.107.0en PyPI y sobreescribiendo las etiquetasv1.107.0,latest,main-latestymain-stableen Docker Hub y GHCR. - Borrado Antiforense de Registros (Token #3): Finalmente, utilizaron el Token #3 para eliminar los logs de ejecución de GitHub Actions y retrasar la detección.
Etapa 2: Dentro de cook.pth — Por Qué Ejecutar pip uninstall Vuelve a Disparar el Malware
En lugar de ocultar el código malicioso únicamente dentro de litellm/__init__.py, el paquete envenenado instala cook.pth y cook.py directamente en la raíz de site-packages/. Por diseño en la biblioteca estándar de Python (Lib/site.py), cada vez que el intérprete de Python arranca, lee todos los archivos .pth en site-packages/ y ejecuta automáticamente cualquier línea que comience con import antes de cargar el script del usuario:
# Contenido de site-packages/cook.pth en litellm==1.107.0:
import os, sys; exec(open(os.path.join(os.path.dirname(__file__) if '__file__' in locals() else [p for p in sys.path if 'site-packages' in p][0], 'cook.py')).read())
pip para Diagnosticar!
Dado que pip, poetry y pytest son scripts de Python que cargan site.py al iniciar, ejecutar pip list o pip uninstall litellm dentro de un contenedor infectado vuelve a ejecutar cook.pth inmediatamente. Inspeccione siempre el sistema de archivos con herramientas nativas de shell (find, grep) o invoque Python con la bandera -S (python3 -S).Etapa 3: Exfiltración de Secretos, Volcado de PostgreSQL y RAT en Segundo Plano
Al ejecutarse, cook.py recolecta todas las variables de entorno (OPENAI_API_KEY, ANTHROPIC_API_KEY, AWS_SECRET_ACCESS_KEY, LITELLM_MASTER_KEY), se conecta directamente a la base de datos PostgreSQL configurada en DATABASE_URL para volcar las tablas LiteLLM_VerificationToken y LiteLLM_Config, roba claves privadas en ~/.ssh/* e inicia un demonio persistente que consulta un servidor C2 cada 60 minutos para ejecutar comandos remotos.
Triaje Forense Seguro y Remediación
#!/usr/bin/env bash
# TRIAJE SEGURO: ¡No invoca python ni pip!
echo "[*] Buscando artefactos maliciosos de LiteLLM 1.107.0 en el sistema de archivos..."
find / -path /proc -prune -o \( -name "cook.pth" -o -name "cook.py" -o -name "litellm-1.107.0*" \) -print 2>/dev/null
echo "[*] Auditando todos los archivos .pth en site-packages en busca de hooks 'import '..."
find / -name "*.pth" 2>/dev/null | xargs grep -n "^import[[:space:]]" 2>/dev/null- Destruir y Reconstruir Entornos Afectados: Cualquier contenedor o entorno virtual que haya descargado
litellm==1.107.0o las imágenes Docker afectadas el 21 de octubre debe ser destruido y reconstruido fijandolitellm==1.106.2(o versiones posteriores limpias verificadas por hash SHA-256). - Rotación Total de Credenciales: Rote de inmediato
LITELLM_MASTER_KEY, contraseñas de PostgreSQL, todas las claves API de proveedores LLM (OpenAI, Anthropic, Gemini, Bedrock), credenciales de AWS/GCP/Azure y claves SSH de desarrolladores.