Ir al contenido
viernes, 30 de octubre de 202623°Dólar Oficial $1.560Dólar Blue $1.565Dólar MEP $1.568Dólar Tarjeta $2.028
PicoTecno

LiteLLM 1.107.0 en PyPI distribuyó un robador de credenciales y una puerta trasera

Según informó safedep.io, la versión 1.107.0 de esta biblioteca de Python publicada en PyPI contenía código malicioso capaz de robar credenciales y ejecutar comandos remotos. El paquete fue retirado el mismo día.

Redacción Pico Tecno

LiteLLM 1.107.0 en PyPI distribuyó un robador de credenciales y una puerta trasera
(Press Information Department / Wikimedia Commons · Public domain)

De acuerdo con un informe de safedep.io, la versión 1.107.0 de LiteLLM, publicada en PyPI (el repositorio oficial de paquetes de Python), incluía un programa que roba credenciales y una puerta trasera que permite la ejecución remota de código en los equipos infectados. Los siete instaladores de esa versión, para Linux, macOS y Windows, copiaban tres archivos al directorio de paquetes de Python. Según el análisis, el código malicioso no aparece en el repositorio público de LiteLLM en GitHub.

Lo más preocupante es que esos archivos se ejecutan cada vez que arranca cualquier proceso de Python en el equipo, incluso si el programa nunca importa LiteLLM. Eso alcanza a aplicaciones, a la herramienta pip, a los servidores de lenguaje que usan los editores de código y a los trabajos de integración continua. LiteLLM confirmó el incidente en un reporte que detalla los pasos de remediación. PyPI eliminó la versión antes de las 13:23 UTC del 21 de octubre de 2026. Las imágenes Docker v1.107.0, latest, main-latest y main-stable, publicadas en Docker Hub y GHCR, también tuvieron el código malicioso entre las 11:46 y las 14:20 UTC.

Las versiones 1.106.2, 1.107.0rc1 y 1.107.0rc2 no están afectadas, y tampoco los paquetes complementarios que 1.107.0 utiliza.

Cómo llegó el código al paquete

La modificación se encontraba en el archivo de configuración de la distribución de código fuente (sdist), donde se agregó una línea que hace que la herramienta de compilación copie una carpeta oculta dentro del instalador. Esa carpeta no figura en el sdist, por lo que la línea era el único cambio visible. Según el análisis, el atacante habría obtenido las credenciales de la CLI de GitHub de tres desarrolladores, probablemente a partir de registros de una instalación interna de LiteLLM expuesta a internet. Con un token de propietario de la organización, eludió las protecciones de la rama principal y dirigió el flujo de publicación hacia un repositorio con nombre parecido, Berri-AI/litellm. Luego superó el paso de aprobación con la credencial de un segundo desarrollador, y el pipeline oficial compiló, firmó y publicó los archivos.

Qué datos buscaba el programa

El código recolectaba y cifraba información sensible del equipo y la enviaba a un servidor externo. Entre los datos mencionados en el informe figuran:

  • Contraseñas guardadas en navegadores Chromium y Firefox, además del historial de navegación.
  • Claves SSH, historiales de consola y credenciales de servicios en la nube como AWS, Azure y Google Cloud.
  • Configuraciones de Kubernetes, Docker, GitHub y herramientas de CI/CD como GitLab y Jenkins.
  • Configuraciones y tokens de asistentes de programación con IA, como Claude Code, Cursor y Copilot.
  • Variables de entorno de otros procesos y las tablas de una base de datos de LiteLLM con claves de proveedores de modelos de lenguaje.

El segundo componente funcionaba como puerta trasera. Cada hora consultaba un archivo alojado en un repositorio de GitHub del atacante para obtener la dirección de un servidor, descargaba desde allí un nuevo fragmento de código y lo ejecutaba. Esto permitía al atacante cambiar el servidor de control sin tocar los equipos infectados.

Alrededor de las 13:40 UTC, unas dos horas después de la publicación, la cuenta de GitHub y el repositorio utilizados por el atacante dejaron de estar disponibles. Por eso, la puerta trasera ya no encuentra ningún servidor y no ejecuta acciones. Sin embargo, los equipos que tuvieron el demonio activo antes de la eliminación podrían haber recibido y ejecutado código de una segunda etapa. safedep.io indicó que no logró recuperar la dirección del servidor.

Compartí esta nota

Seguí leyendo