sistema: OPERATIVO
← volver a todos los hacks
INFRASTRUCTURE CRITICAL NEW

LiteLLM CVE-2026-47101→40217: de usuario sin privilegios a admin y RCE

Obsidian Security divulgó (junio de 2026) una cadena de tres fallos en LiteLLM que lleva a un usuario de bajos privilegios a proxy_admin y a la ejecución de código: una toma de control CVSS 9.9 de la pasarela de IA.

2026-06-18 // 7 min affects: litellm, ai-gateways

¿Qué es esto?

El 16 de junio de 2026, Obsidian Security divulgó públicamente una cadena de tres vulnerabilidades en LiteLLM, la pasarela de IA de código abierto ampliamente desplegada. Encadenadas, forman una ruta CVSS 9.9 que lleva de un usuario de bajos privilegios por defecto hasta el rol proxy_admin y, después, a la ejecución remota de código en el host de la pasarela. Las tres CVE:

  • CVE-2026-47102 — escalada de privilegios por falta de autorización a nivel de campo en /user/update y /user/bulk_update. El campo user_role no está protegido frente a escrituras controladas por el llamante: cualquier usuario que alcance esos manejadores puede ascenderse a proxy_admin.
  • CVE-2026-47101 — elusión de autorización: un no-admin puede crear o modificar una clave virtual cuyos allowed_routes se persisten tal cual, concediéndole acceso a rutas —incluidas las exclusivas de admin— que nunca debería tener.
  • CVE-2026-40217 — escape del sandbox del guardián de «código personalizado». Rutas accesibles al admin compilan y ejecutan Python suministrado por el admin en un sandbox basado en exec() que no lo contiene de verdad, logrando ejecución de código en el servidor.

Según Obsidian, la cadena completa se corrige en LiteLLM v1.83.14-stable (publicada el 2 de mayo de 2026; divulgación pública a mediados de junio). Es distinta del RCE vía endpoints de prueba MCP, CVE-2026-42271, que CISA añadió a su catálogo KEV en junio de 2026 — no existe entrada KEV pública para la cadena 47101/47102/40217 al momento de escribir.

Cómo funciona

La cadena es un manual de fallo de autorización, no un ataque al modelo. Cada eslabón retira una barrera:

  1. Eludir la autorización de ruta (47101). LiteLLM confía en los allowed_routes que aporta el llamante en los endpoints de gestión de claves y los almacena literalmente. Una cuenta de bajos privilegios crea una clave virtual que referencia rutas prohibidas.
  2. Escalar a admin (47102). Al alcanzar /user/update (o la variante masiva), el atacante escribe directamente el campo sensible user_role, ascendiéndose a proxy_admin, lo que desbloquea el acceso total a usuarios, equipos, claves, modelos e historial de prompts.
  3. Ejecutar código (40217). Como admin, el atacante alcanza la vía de compilación/prueba del guardián y ejecuta Python en un sandbox defectuoso, obteniendo RCE en el proceso de la pasarela.

Aquí no se reproduce ningún payload, ni hace falta para entender la lección: una escritura de «configuración» que toca un rol o una ruta es una decisión de autorización, y LiteLLM trataba varias como simples actualizaciones de campo. La causa raíz recurrente es una puerta de ruta que consulta el estado de una clave controlada por el usuario como concesión de reserva, lo que invierte el modelo de autorización.

Por qué importa

Una pasarela de IA no es un enrutador pasivo: es infraestructura del plano de control. Una vez completada la cadena, Obsidian señala que el atacante puede alcanzar secretos de nivel host como LITELLM_MASTER_KEY, LITELLM_SALT_KEY y DATABASE_URL, además de las credenciales de proveedores para OpenAI, Anthropic, Gemini, Bedrock, Azure y cualquier otro backend configurado. Desde una sola posición, la pasarela se convierte en bóveda de secretos, corredor de autorización e intermediario entre agentes y modelos.

Esta investigación demuestra una consecuencia más propia de la IA: una pasarela comprometida puede reescribir las respuestas del modelo y dirigir a los agentes posteriores —incluidos los agentes de código— hacia llamadas a herramientas elegidas por el atacante. Una toma de control del servidor se convierte así en un pivote de cadena de suministro contra todo lo que la pasarela alimenta. Si pone LiteLLM ante una flota de agentes, su radio de impacto es la unión de todas las credenciales y todas las acciones de agente que intermedia.

Defensas

  • Parchee ya. Actualice a LiteLLM v1.83.14-stable o posterior, que cierra la cadena completa según Obsidian. Confirme también estar más allá de los arreglos de CVE-2026-42271 y CVE-2026-42208, rastreadas por separado.
  • Rote secretos tras la exposición. Si una instancia sin parchear fue accesible desde Internet, asuma fuga. Rote por prioridad: claves API de proveedores, LITELLM_MASTER_KEY y LITELLM_SALT_KEY, credenciales de base de datos y, después, reemita las claves virtuales.
  • Saque la pasarela de Internet. Trate LiteLLM como cualquier plano de control portador de secretos: solo red privada, tras un ingreso autenticado. La mayor parte de la explotación rápida en este ecosistema golpea instancias expuestas.
  • Imponga autorización a nivel de campo en las escrituras de «config». Donde una entrada de usuario fije user_role, allowed_routes, propiedad de equipo o metadatos de política, trátela como operación exclusiva de admin, no como una actualización ordinaria. Audite todos los manejadores de escritura de claves/usuarios.
  • Aísle o desactive los guardianes de «código personalizado». Ejecute el proxy con mínimo privilegio, en un contenedor sin acceso al disco del host ni al shell que no sea estrictamente necesario, para que un escape de exec() aporte lo menos posible al atacante.
  • Vigile las llamadas a herramientas y la salida de red. Alerte ante cambios de rol en autoservicio, claves virtuales creadas con allowed_routes amplios y tráfico saliente anómalo de la pasarela. Una pasarela comprometida que dirija agentes se manifestará como invocaciones de herramientas inesperadas.

Estado

CVEClaseEfectoCorregido en
CVE-2026-47101Elusión de autorizaciónallowed_routes no autorizados en claves virtualesv1.83.14-stable (cadena completa)
CVE-2026-47102Escalada de privilegiosAutoascenso a proxy_admin vía /user/updateversiones < 1.83.10 afectadas
CVE-2026-40217Escape de sandbox del guardiánEjecución de código en el servidor vía exec()arreglo del guardián; v1.83.14-stable
CVE-2026-42271 (aparte)Inyección endpoint de prueba MCPRCE; en el KEV de CISA1.83.7

El encuadre correcto no es «otro RCE de LiteLLM». Es que las pasarelas de IA ya son planos de control portadores de ejecución, y varias de sus fronteras de privilegios se aplicaban como simples campos de datos. Parchee la cadena, rote lo que pudo alcanzar y trate cada escritura que fije un rol o una ruta como la decisión de autorización que realmente es.

Sources