Compromiso de litellm 1.82.7/1.82.8: Mecanismo de robo de credenciales vía PyPI
La biblioteca litellm en las versiones 1.82.7 y 1.82.8 en PyPI contiene código malicioso que roba claves SSH, credenciales de nube, secretos de Kubernetes y claves API. El ataque aprovecha la cadena de suministro, activándose automáticamente al iniciar el intérprete de Python o importar el módulo. Los sistemas afectados incluyen aquellos con dependencias transitivas, como los plugins MCP de Cursor.
Detección del Incidente
El ataque salió a la luz gracias a una fork bomb en un archivo .pth que agotó los recursos del host. Sin este error, el malware podría haber operado de manera sigilosa. Las versiones se publicaron el 24 de marzo de 2026, entre las 10:39–10:52 UTC sin actualizaciones en GitHub: el código malicioso se inyectó solo en los artefactos de PyPI, eludiendo la revisión de código.
Los investigadores de FutureSearch notaron la ausencia de etiquetas de lanzamiento. El repositorio está limpio, lo cual es típico en ataques de cadena de suministro.
Detalles Técnicos del Malware
Etapa 1: Recopilación de Datos
El payload extrae:
- Claves SSH y configuraciones.
- Archivos
.env. - Credenciales de AWS, GCP, Azure.
- Kubeconfig y secretos de Kubernetes.
- Contraseñas de bases de datos.
- Historial de shell.
- Archivos de billeteras crypto.
- Variables de entorno.
Se realizan consultas a los endpoints IMDS de los proveedores de nube.
Etapa 2: Exfiltración
Los datos se cifran con AES-256-CBC usando RSA-4096 (clave pública hardcodeada) y se envían a models.litellm[.]cloud: un dominio no oficial.
Etapa 3: Persistencia
En Kubernetes, el malware:
- Lee todos los secretos del clúster mediante el token de cuenta de servicio.
- Crea pods privilegiados
alpine:latestenkube-systemcon el FS del host montado. - Instala el backdoor
~/.config/sysmon/sysmon.py. - Registra un servicio de usuario systemd para ejecutarse en todos los nodos.
La versión 1.82.8 usa litellm_init.pth (34 628 bytes), ejecutado automáticamente por Python. La 1.82.7 incluye código ofuscado en proxy/proxy_server.py.
Detección y Remediación
Verifica los sistemas con estos comandos:
# litellm version
pip show litellm
# Traces in uv cache
find ~/.cache/uv -name "litellm_init.pth"
# Backdoor
ls ~/.config/sysmon/sysmon.py
ls ~/.config/systemd/user/sysmon.service
En Kubernetes: kubectl get pods -n kube-system | grep node-setup-.
Si las versiones 1.82.7/1.82.8 están instaladas:
pip uninstall litellm
rm -rf ~/.cache/uv
# Or: pip cache purge
Retrocede a 1.82.6 (22 de marzo, limpio según Endor Labs). Rota todas las credenciales: claves SSH, tokens de nube, kubeconfig, claves API, contraseñas de BD. Verifica pipelines CI/CD e imágenes Docker de las últimas 24–48 horas.
Contexto de la Campaña TeamPCP
El ataque forma parte de la campaña TeamPCP (desde diciembre de 2025):
- 19 de marzo: Trivy (75/76 tags de
trivy-action). - 21–23 de marzo: KICS/Checkmarx, OpenVSX, CanisterWorm en npm (64+ paquetes).
- 24 de marzo: litellm.
Marcadores comunes: AES-256 + RSA-4096, una clave pública. El GitHub Issue #24512 en litellm se cerró como “not planned” con comentarios sospechosos: posible compromiso de cuenta.
Indicadores de Compromiso
- Dominio C2:
models.litellm[.]cloud. - Archivo:
litellm_init.pth. - SHA-256:
ceNa7wMJnNHy1kRnNCcwJaFjWX3pORLfMh7xGL8TUjg. - Backdoor:
~/.config/sysmon/sysmon.py. - K8s: pods
node-setup-*enkube-system.
Puntos Clave
- El código malicioso en
.pthse activa sinimport, afectando todos los procesos de Python. - La exfiltración está cifrada; C2 es un dominio falso de litellm.
- La explotación de Kubernetes proporciona acceso completo al clúster mediante pods privilegiados.
- Parte de la cadena TeamPCP: monitorea Trivy, KICS, paquetes npm.
- Retroceso a 1.82.6 + rotación completa de credenciales es obligatoria.
— Editorial Team
Aún no hay comentarios.