Vulnerabilidad RCE en el Framework SGLang Permite la Ejecución de Código a través de Modelos GGUF Maliciosos

Metal hanging sign with bright orange 'SGL' lettering and a small logo on the left, set in a futuristic cityscape.

Se ha emitido un aviso de seguridad de criticidad máxima tras la divulgación pública de una vulnerabilidad de Ejecución Remota de Código (RCE) en SGLang, un framework de código abierto de alto rendimiento utilizado para servir Modelos de Lenguaje Grande (LLMs) y modelos multimodales. Identificada como CVE-2026-5760, esta falla de inyección de comandos permite a un atacante comprometer totalmente el servidor de inferencia de IA. El impacto es particularmente severo debido a la adopción masiva del proyecto (más de 5,500 forks en GitHub) y la naturaleza insidiosa del vector de ataque: el uso de modelos de IA alojados en repositorios públicos.


Anatomía del Ataque

La vulnerabilidad se origina en un fallo estructural en la forma en que SGLang procesa las plantillas de chat dentro de archivos de modelos específicos, derivando en una Inyección de Plantilla del Lado del Servidor (SSTI).

  • Armamento del Modelo: Un atacante diseña un archivo de modelo malicioso en formato GGUF (GPT-Generated Unified Format). Dentro de este archivo, manipula el parámetro tokenizer.chat_template para inyectar una carga útil de Jinja2 (SSTI).
  • Activación por Frase Clave: La carga útil se diseña para activarse específicamente cuando procesa una frase de activación (trigger phrase) asociada a modelos de re-clasificación (reranker), como Qwen3, apuntando a la ruta de código vulnerable en entrypoints/openai/serving_rerank.py.
  • El Engaño (Ingeniería Social en IA): El atacante sube este modelo malicioso a plataformas de confianza utilizadas por desarrolladores y científicos de datos, como Hugging Face.
  • Ejecución Silenciosa: La víctima descarga y carga el modelo en su servidor SGLang. El fallo se desencadena en el momento en que se envía una solicitud legítima al endpoint /v1/rerank.
  • Compromiso Total: Al recibir la solicitud, SGLang lee la plantilla y la renderiza utilizando la función jinja2.Environment(). El error crítico aquí es la falta de sandboxing (aislamiento). Al no usar un entorno restringido, la carga útil SSTI se ejecuta directamente como código Python arbitrario en el servidor, otorgando al atacante control remoto.

Impacto

Esta vulnerabilidad expone la “cadena de suministro” de los modelos de IA, demostrando que descargar un modelo de lenguaje hoy en día conlleva el mismo riesgo que ejecutar un archivo binario desconocido:

  • Secuestro de Infraestructura de IA: El acceso RCE permite al atacante robar secretos corporativos, tokens de facturación de APIs, o modificar las respuestas del modelo para envenenar la inteligencia artificial de la organización.
  • Movimiento Lateral: Al estar posicionado en el servidor de inferencia (generalmente dotado de alto poder de cómputo y acceso a bases de datos), el atacante puede pivotar hacia otros nodos de la red interna.

Recomendaciones y Mitigación

De acuerdo con el CERT Coordination Center (CERT/CC), durante el proceso de coordinación de esta divulgación no se obtuvo respuesta ni parche oficial por parte de los mantenedores de SGLang. Por tanto, se deben aplicar mitigaciones manuales e inmediatas:

  • Modificación del Código Fuente (Workaround Crítico): Los equipos de desarrollo de IA (MLOps) deben auditar su instancia local de SGLang y modificar el código para reemplazar el uso de jinja2.Environment() por la función segura ImmutableSandboxedEnvironment al renderizar las plantillas de chat. Esto encapsulará y neutralizará la ejecución de código Python arbitrario.
  • Aislamiento del Endpoint: Si la corrección del código no es factible de inmediato, se debe deshabilitar o restringir estrictamente el acceso de red al endpoint /v1/rerank en los servidores de producción de SGLang.
  • Auditoría Estricta de Modelos (Zero Trust para IA): Implementar una política estricta de validación y control de integridad. Los modelos GGUF no deben descargarse ni ejecutarse desde repositorios públicos o comunitarios no verificados en Hugging Face sin antes auditar los metadatos y el tokenizer.chat_template.

Related Post