Saltar al contenido

Secuestran LiteLLM 1.107.0 para distribuir un ladrón de credenciales

Wheels maliciosos de LiteLLM 1.107.0 estuvieron en PyPI de 11:39 a 13:23 UTC el 21 de octubre de 2026 y ejecutaban un ladrón de credenciales cada vez que arrancaba Python.

Por Tech AI Wire Team

3 min de lectura

XLinkedIn
LiteLLM's incident report page titled Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised, with its authors and a status line.

En cifras

PyPI wheels carried the malware
7
UTC window the wheels were on PyPI
11:39-13:23
the clean version to reinstall
1.106.2

Unos atacantes publicaron una versión maliciosa de LiteLLM 1.107.0 en PyPI y Docker el 21 de octubre de 2026, tras hacerse con el sistema de publicación del proyecto. Cualquier máquina que la instaló ejecutaba un ladrón de credenciales cada vez que arrancaba Python. LiteLLM pide a los equipos afectados que den sus secretos por robados y los cambien.

LiteLLM es una herramienta de código abierto que se sitúa entre las aplicaciones y los proveedores de modelos de IA. Su servidor proxy guarda las claves de API de los proveedores, lo que lo convierte en un objetivo valioso.

Qué se publicó y durante cuánto tiempo

El informe del incidente de LiteLLM enumera cada artefacto afectado. La etiqueta oficial de código v1.107.0 en GitHub está limpia. La versión se compiló desde un repositorio que imitaba al original, Berri-AI/litellm, que según StepSecurity tenía diez commits de los atacantes.

ArtefactoAfectadoVentana (UTC, 21 de octubre)
PyPILos siete wheels de litellm==1.107.0 (macOS, Linux, musl Linux, Windows)11:39 a 13:23
Docker Hubv1.107.0, latest, main-latest, main-stable11:46 a 14:20
GitHub Container RegistryLas mismas etiquetas de litellm, litellm-database, litellm-non_root11:46 a 13:51

La versión 1.106.2 está limpia, igual que las versiones candidatas de 1.107.0, según StepSecurity. LiteLLM dice que los clientes de su versión empresarial privada no se vieron afectados.

Cómo funciona la carga maliciosa

El malware no esperaba a que alguien importara LiteLLM. Añadía dos ganchos de arranque, cook.pth y sitecustomize.py. Python ejecuta ambos cada vez que arranca en ese entorno, aunque el comando sea solo pip.

La primera carga es un ladrón que se hace llamar "privcollect", informa StepSecurity. Recoge tokens de la nube, claves privadas, archivos de credenciales de herramientas de IA, datos del navegador y variables de entorno. También se lleva las credenciales guardadas del proxy de LiteLLM. Los datos se cifran y se envían a litellm.dev, un dominio registrado el 13 de octubre.

La segunda carga es un cargador que corre como proceso oculto en segundo plano. Cada hora lee un nombre de host de un archivo en GitHub, descarga código de ese host y lo ejecuta. La cuenta de GitHub detrás de ese archivo se eliminó, pero las máquinas infectadas siguen consultando la misma dirección.

Cómo entraron los atacantes

El ataque pasó por las cuentas de GitHub de tres ingenieros, dijo a The Hacker News Oliver Jensen, director de seguridad de LiteLLM. Una credencial desactivó la protección de ramas, otra aprobó la publicación en producción y una tercera borró los registros de los flujos de trabajo.

En su actualización de las 20:30 UTC, LiteLLM dice creer que el atacante sacó tokens de GitHub CLI de unos registros. Esos registros eran de un despliegue interno de LiteLLM accesible desde internet. La empresa señala que Claude Code puede incluir el token de GitHub CLI de un usuario en el cuerpo de una respuesta. Si esos cuerpos se registran, el token acaba en los registros. Antes, Jensen había dicho que el método aún no estaba identificado.

Ese mismo día, GitHub abrió una vista previa pública de tokens de GitHub CLI con caducidad. Según el registro de cambios de GitHub, un token filtrado deja de servir "en cuestión de horas en lugar de durar indefinidamente".

Qué significa para los desarrolladores

Si usas LiteLLM, revísalo hoy y en el orden que indica LiteLLM.

  • No empieces con pip install. Los ganchos de arranque vuelven a ejecutarse cada vez que arranca Python. Primero localiza y detén el proceso que retiene /tmp/remote_code_loader.lock.
  • Quita los ganchos y luego reinstala. Borra cook.pth, cook.py y sitecustomize.py de site-packages. Instala litellm==1.106.2 o, mejor, reconstruye el entorno o la imagen desde cero.
  • Da los secretos por perdidos. LiteLLM dice que, si 1.107.0 llegó a ejecutarse en un equipo con acceso a internet de salida, hay que suponer que el robo tuvo éxito. Cambia las claves de proveedores guardadas en el proxy, sus claves maestra y virtuales, la contraseña de la base de datos y el rol de nube de la máquina.
  • Fija por resumen. Etiquetas como latest apuntaron a la imagen maliciosa durante más de dos horas. Fija las imágenes por resumen (digest) y los paquetes por hash.
  • Acorta tus propios tokens. Activa los tokens de GitHub CLI con caducidad con gh auth login --expiring, disponible desde gh 2.103.0. Mantén los tokens fuera de los cuerpos de peticiones y respuestas que se registran.

Es la segunda versión de LiteLLM secuestrada este año, tras las versiones 1.82.7 y 1.82.8 en marzo. Las claves de proveedores guardadas también fueron el botín en Una brecha en OpenCode Console expone claves guardadas de proveedores de IA la semana pasada.

Fuentes

  1. Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised - LiteLLM
  2. LiteLLM Compromised in Supply Chain Attack Delivering Credential Stealer and Backdoor - The Hacker News
  3. litellm 1.107.0 Compromised on PyPI: Backdoored Wheels Drop a Credential Stealer and an Hourly Remote Code Loader - StepSecurity
  4. GitHub CLI: Opt in to expiring, auto-refreshing OAuth tokens - GitHub Changelog
securitypythonllmsupply-chain

Artículos relacionados

Chrome's About page showing the browser up to date on version 153, next to the Settings menu.
Herramientas dev

Chrome pasa a un ciclo de dos semanas

Chrome 153 inicia un ciclo de hitos de dos semanas, frente a cuatro. Según Google, Chrome 149 y 150 corrigieron por sí solos 1.072 fallos de seguridad.