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

Una petición, una caída: una aserción alcanzable derriba servidores vLLM

Una petición de embeddings dirigida a un modelo multimodal en vLLM dispara una aserción interna y hace caer fatalmente todo el servidor de inferencia — una denegación de servicio autenticada corregida en julio de 2026.

2026-07-17 // 6 min affects: vllm, vllm-0.12.0-to-0.23.x, m-rope-multimodal-models

¿Qué es esto?

El 6 de julio de 2026, el proyecto vLLM publicó un aviso de seguridad (actualizado el 15 de julio) sobre un fallo de denegación de servicio en su servidor de inferencia. vLLM es uno de los motores de código abierto más desplegados para servir grandes modelos de lenguaje, de modo que una caída provocada por una sola petición tiene aquí un radio de impacto desproporcionado. El problema afecta a las versiones desde la 0.12.0 hasta la 0.24.0 sin incluirla, y está corregido en la 0.24.0.

Este fallo no es de ejecución de código ni de fuga de datos: su impacto recae por completo en la disponibilidad. Una única petición autenticada, con la forma correcta, tumba todo el proceso servidor. La puntuación de la National Vulnerability Database lo sitúa en un rango medio-alto (CVSS 3.1 base 6,5; CVSS 4.0 base 7,1), sin impacto en confidencialidad ni integridad, pero con impacto alto en disponibilidad. La clase de debilidad es una aserción alcanzable (CWE-617): una comprobación interna de coherencia, pensada solo para atrapar estados imposibles, puede alcanzarse mediante una entrada influida por el atacante.

Cómo funciona

vLLM expone un endpoint /v1/completions compatible con OpenAI. Además de los prompts de texto habituales, acepta una entrada de embeddings (prompt-embeds): vectores de embeddings precalculados enviados en lugar de identificadores de tokens, una funcionalidad que usan los equipos que construyen sus propios codificadores previos o que quieren saltarse el tokenizador.

La caída aparece cuando una de esas peticiones de embeddings se enruta a un modelo que usa M-RoPE — el multimodal rotary position embedding, el esquema de codificación posicional que emplean las familias de modelos visión-lenguaje para alinear tokens de texto y de imagen. La combinación de la vía de embeddings y del manejo de posiciones de M-RoPE alcanza un estado que el motor afirma que nunca debería ocurrir. Cuando la aserción falla, no se captura ni se degrada a un error por petición: se propaga a través de EngineCore, el bucle central de planificación y ejecución de vLLM, y termina toda la aplicación servidor. Todas las demás peticiones, en curso y futuras, en esa instancia mueren con ella.

Tres propiedades merecen atención. Primera, es trivial una vez precalculado: sin campaña de fuzzing ni fuerza bruta una vez conocida la forma; la petición coincide con la vía vulnerable o no. Segunda, la barrera de privilegios es baja: cualquier cliente autorizado a llamar al endpoint de completions puede dispararlo, lo que en muchos despliegues internos o multi-inquilino supone una población amplia. Tercera, el resultado es total en lugar de degradado: el proceso finaliza, así que sin un supervisor que lo reinicie el servicio queda inactivo, y el atacante puede simplemente repetir la petición tras cada reinicio.

Conforme a la divulgación responsable, este artículo no reproduce la carga que dispara el fallo. El aviso, la entrada de NVD y la pull request de corrección contienen todo lo que un defensor necesita para identificar su exposición y remediarla.

Por qué importa

La disponibilidad de la inferencia es la disponibilidad de la producción. Cuando un servidor de modelo respalda un asistente de cara al cliente, un copiloto interno o una cadena de agentes, una caída fiable de un solo golpe es una primitiva de indisponibilidad limpia — y como las instancias de vLLM suelen agruparse tras un balanceador de carga, un atacante que alcance una réplica a menudo puede recorrer toda la flota.

También subraya un patrón en la seguridad de la infraestructura LLM: la superficie de ataque más rica suele ser la modalidad de entrada opcional, no la vía principal del chat. Los embeddings de prompt, las gramáticas de salida estructurada, las subidas de audio y los cargadores multimodales amplían cada uno lo que unos llamantes no confiables pueden introducir en el motor, y cada uno ha producido fallos de disponibilidad de esta clase. Las aserciones escritas para guardar invariantes internas se convierten en disparadores de caída remota en cuanto una entrada externa puede llevar al motor al estado que protegen.

Defensas

La corrección principal es inequívoca: actualice a vLLM 0.24.0 o posterior. Para quien no pueda parchear de inmediato, superponga estos controles, que también endurecen frente a la familia más amplia de denegaciones de servicio de inferencia descrita en la guía de OWASP sobre consumo no acotado:

  1. Restrinja la funcionalidad prompt-embeds. Si su carga no envía vectores de embeddings directamente, deshabilite o rechace las entradas prompt_embeds en la pasarela, de modo que nunca se alcance la vía vulnerable.
  2. Autentique y limite la tasa del endpoint de completions. Nunca exponga /v1/completions a la internet abierta. Exija credenciales y limite las peticiones por cliente para que un atacante en bucle de caída quede frenado aunque exista un disparador.
  3. Valide la entrada no confiable en la frontera. Imponga un esquema estricto a los cuerpos de petición — rechace campos inesperados, cargas de embeddings sobredimensionadas o malformadas, y peticiones cuyo tipo de entrada no coincida con el modelo servido.
  4. Asuma que el proceso morirá, y recupérelo rápido. Ejecute cada servidor bajo un supervisor (systemd, sondas de vivacidad de Kubernetes o equivalente), reparta las réplicas para que una caída no sea una avería total, y alerte ante una tasa de reinicios anómala como señal de explotación.
  5. Haga seguimiento de sus dependencias de inferencia. Mantenga un inventario de las versiones de vLLM en cada entorno; los fallos de caída de una sola petición en los motores de servicio son recurrentes, y saber dónde corre cada versión es lo que hace rápida una actualización de emergencia.

Estado

ElementoReferenciaFechaNotas
Aviso publicadoGHSA-33cg-gxv8-3p8g / CVE-2026-555142026-07-06Aserción alcanzable (CWE-617); impacto solo en disponibilidad
Aviso actualizadoNVD / OSV2026-07-15Enriquecimiento de puntuación y metadatos
Versiones afectadasvLLM 0.12.0 → <0.24.0Modelos multimodales M-RoPE por la vía prompt-embeds
CorrecciónvLLM PR #45252 / release v0.24.02026La actualización es la remediación definitiva
ExplotaciónEPSS ~0,4 %2026-07Sin herramientas públicas de explotación indexadas hasta la fecha

La lección es antigua en un escenario nuevo: una aserción es una promesa sobre un estado interno, y en cuanto un llamante externo puede influir en ese estado, la promesa se convierte en un interruptor de apagado remoto. Inventaríe sus motores de servicio, filtre las vías de entrada opcionales y trate la disponibilidad de la inferencia como la dependencia de producción que ahora es.

Los detalles aquí presentados proceden del aviso de vLLM, la ficha de NVD y la pull request de corrección, todos fechados en julio de 2026. No se reproduce ninguna carga disparadora; los defensores deben consultar el aviso enlazado para evaluar su exposición.

Sources