Incluso un programa inactivo podía filtrar datos secretos a terceros sin ser detectado.

Con solo ejecutar Python después de instalar LiteLLM bastaba para que la biblioteca infectada comenzara a robar secretos, incluso si la aplicación no la invocaba. El 21 de octubre los atacantes introdujeron código espía en la versión 1.107.0 del popular gateway de IA. Los desarrolladores confirmaron la compromisión de las siete distribuciones wheel para PyPI y de las imágenes de contenedor Docker publicadas mediante el sistema de lanzamiento habitual.
La trampa principal fue el archivo cook.pth, que el instalador colocaba en el directorio site-packages. Al iniciarse Python procesa automáticamente esos archivos, por lo que la línea import cook activó el ladrón de datos oculto en cook.py. Los analistas de Upwind determinaron que el componente sitecustomize.py también se ejecutaba automáticamente y creaba un proceso en segundo plano para ejecutar comandos remotos.
El espía buscaba contraseñas y cookies de navegadores, claves SSH, tokens de GitHub, AWS, Azure y Google Cloud, y configuraciones de herramientas de IA. En entornos con LiteLLM el malware podía extraer de la base las claves de los proveedores de modelos conectados. La información recopilada era cifrada y enviada a la dirección litellm.dev, que no pertenece al proyecto. El número real de afectados aún no se ha determinado.
Un mecanismo de persistencia separado comprobaba una vez por hora un archivo en GitHub para obtener la dirección del servidor de mando y ejecutar los comandos descargados allí. Al momento del análisis el archivo seguía vacío, por lo que no se confirmó la ejecución de una segunda etapa por ese canal. En Windows parte del mecanismo no funcionaba; sin embargo, el extractor de credenciales seguía operativo.
El código no apareció en el repositorio público de LiteLLM. Los atacantes cambiaron la fuente de compilación por Berri-AI/litellm, una falsificación del repositorio oficial BerriAI/litellm con un guion extra. Para el lanzamiento utilizaron tokens de GitHub CLI de tres desarrolladores: con uno eludieron la protección de la rama, con otro aprobaron la publicación y con el tercero eliminaron los registros de compilación. Como resultado, el lanzamiento oficial parecía legítimo.
El equipo de LiteLLM supone que los tokens llegaron a los atacantes a través de los registros de una puerta interna accesible desde internet. Los desarrolladores hallaron casos en los que Claude Code incluía un token OAuth de GitHub CLI en el texto de la respuesta, que luego quedaba en los registros de LiteLLM. En el servidor se encontró una cuenta desconocida, pero la ruta de la intrusión inicial aún no ha sido confirmada.
En PyPI la versión infectada estuvo disponible desde las 11:39 hasta las 13:23 UTC, y las imágenes Docker maliciosas permanecieron accesibles hasta las 14:20 UTC. El equipo retiró las compilaciones, restableció las etiquetas limpias y limitó el acceso a GitHub. Los clientes de un registro corporativo privado no resultaron afectados. LiteLLM se descarga unas 23 millones de veces por semana, pero todavía no se ha revelado el número de descargas de la versión maliciosa.
Los desarrolladores recomiendan primero eliminar los archivos maliciosos sin iniciar Python, porque incluso el comando pip puede reactivar al espía. Luego se debe recrear los entornos, volver a la versión comprobada 1.106.2 y cambiar las claves disponibles en la máquina. En marzo LiteLLM ya fueron atacados a través de la cadena de suministro, pero no hay pruebas de que el incidente actual esté relacionado con la campaña anterior.