Volver al inicio

Ataque a litellm: robo de credenciales en PyPI

El compromiso de las versiones 1.82.7 y 1.82.8 de litellm en PyPI incluye recolección y exfiltración de credenciales vía archivos .pth y pods de K8s. Mecanismos, IoC y pasos de mitigación descritos. Ataque vinculado a la campaña TeamPCP.

litellm bajo ataque: stealer en versiones de PyPI
Advertisement 728x90

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.

Google AdInline article slot

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.

Google AdInline article slot

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:latest en kube-system con 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:

Google AdInline article slot
# 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-* en kube-system.

Puntos Clave

  • El código malicioso en .pth se activa sin import, 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

Advertisement 728x90

Leer después