Un usuario GitLab autorizado para configurar un agente no debería recibir por ello los poderes del sistema operativo del servicio que lo procesa. CVE-2026-90970 rompe esa separación: una configuración Duo preparada puede escapar del aislamiento de plantillas de prompts y ejecutar comandos arbitrarios en un AI Gateway afectado.

GitLab divulgó el fallo el 2 de octubre de 2026 y lo calificó crítico, CVSS 3.1 de 9,9. Explotarlo requiere autenticación y acceso a Duo Agent Platform. No es una toma de todos los servidores GitLab por visitantes anónimos sin clic. Importa la frontera cruzada después de esos requisitos, no fingir que no existen.

Los gateways alojados por GitLab ya están corregidos. Los operadores autohospedados afectados deben actualizar e investigar su despliegue. Mantener código y prompts en una red privada no mantiene automáticamente al autor autenticado dentro del aislamiento previsto.

Verificar el gateway, no solo GitLab

Los rangos afectados empiezan en AI Gateway 18.1.6 y llegan hasta antes de 19.2.4; la rama 19.3 está afectada antes de 19.3.2 y la 19.4 antes de 19.4.1. Las correcciones son 19.2.4, 19.3.2 y 19.4.1. Hay que adoptar la versión corregida adecuada o una posterior compatible del gateway.

Los números describen un servicio independiente entre funciones IA GitLab y modelos. Procesa lógica de aplicación y solicitudes; no es el modelo lingüístico. Imagen y ciclo de despliegue pueden diferir de la aplicación principal. Mirar solo la versión familiar de GitLab puede dejar pasar un gateway antiguo.

Los esquemas gestionado, híbrido y totalmente propio son diferentes. En híbrido, algunas funciones pueden usar infraestructura del cliente y otras servicios GitLab. El inventario necesita rutas por función, réplicas, desarrollo y prototipos, imágenes almacenadas y recuperación, no solo la interfaz productiva principal.

Un despliegue totalmente propio puede funcionar con poco o ningún internet general. Reduce algunas vías externas, pero no elimina personal autorizado, cuentas robadas, tokens o cargas internas comprometidas. La desconexión también puede retrasar avisos y entrega de parches.

El fallo ocurre en el software de plantillas

Un flujo agente combina prompts, herramientas, decisiones y acciones en desarrollo multietapa. Las plantillas convierten configuración y valores de ejecución en instrucciones del modelo. El aislamiento debe impedir que las entradas lleguen a funciones peligrosas o capacidades del sistema operativo.

CWE-1336 es la neutralización incorrecta de elementos especiales de un motor de plantillas. Sintaxis controlada por el atacante puede convertirse en comportamiento ejecutable en lugar de datos. GitLab describe comandos arbitrarios; sus consecuencias dependen de permisos del proceso, objetos expuestos, credenciales y rutas de red.

No es inyección de prompts, que intenta desviar el modelo con instrucciones. La inyección de plantillas ataca el software convencional que las construye o renderiza. Los comandos pueden ejecutarse sin importar la respuesta del modelo. Otra instrucción de seguridad conductual no repara el procesamiento vulnerable.

Tampoco prueba que un modelo inventase una fuga por su cuenta. La entrada es un flujo de IA, pero la frontera vulnerable pertenece a la aplicación. La revisión debe cubrir historia de configuración, gateway y contenedor, permisos y credenciales posteriores. Las conversaciones no son todo el registro del incidente.

Por qué una falla autenticada alcanza 9,9

El vector es AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Ataque por red no exige shell local previo, pero red no significa necesariamente internet público. Baja complejidad no requiere una carrera estrecha ni estado extraño en la evaluación estándar. Privilegios bajos siguen exigiendo login y acceso a la plataforma.

Sin interacción adicional significa que otra persona no necesita abrir archivos, aprobar diálogos ni pulsar señuelos una vez que llega la configuración. Cambio de alcance refleja el paso de entrada autorizada del flujo a otra autoridad: el entorno de comandos del gateway.

Impacto alto en confidencialidad, integridad y disponibilidad refleja lectura, modificación e interrupción posibles. El 9,9 estandarizado no prueba daños máximos en todos los entornos ni intrusión alguna. Arquitectura, mínimo privilegio, sistemas accesibles y secretos definen la consecuencia real.

Un usuario autenticado no es automáticamente administrador. Autores de flujos pueden necesitar amplias funciones sin merecer los permisos del intérprete. Un token robado o identidad automática demasiado privilegiada hace importante la separación incluso si el usuario original era legítimo.

Los contenedores son fronteras, no borran riesgo. Incluso sin root pueden exponer secretos montados, tokens, datos procesados y redes internas. Montajes escribibles, privilegios excesivos y salida amplia agravan efectos. Comandos en un contenedor tampoco prueban compromiso total de la infraestructura.

Una segunda falla crítica plantea una pregunta de arquitectura

En febrero GitLab reparó CVE-2026-1868 en Duo Workflow Service del gateway. También implicaba expansión insegura de plantillas de usuarios mediante flujos preparados, con el mismo 9,9 y vector. Versiones corregidas incluían 18.6.2, 18.7.1 y 18.8.1; un miembro interno lo descubrió.

La similitud justifica examinar más profundamente la confianza flujo-plantilla. No prueba regresión, reparación incompleta en febrero ni ruta idéntica en octubre. Los resúmenes públicos no establecen relación; ninguna hipótesis debe presentarse confirmada.

Una configuración declarativa flexible puede actuar como lenguaje cuando expresiones, variables y plugins se convierten en acciones privilegiadas. Más personalización amplía lo que deben interpretar con seguridad analizadores y entornos aislados. Lo peligroso es combinar plantillas no confiables y acceso valioso en un proceso.

Ayudan capas independientes: entradas como datos, objetos mínimos, envío autorizado, límites de archivos/red/credenciales y cambios atribuibles. Crear o modificar un flujo debe poder relacionarse con el comportamiento posterior. Necesita propietario, revisión, versiones y pruebas como CI.

Parchear y determinar el compromiso son tareas distintas

Operadores deben conservar digest previo y pruebas de despliegue, instalar lo corregido, reiniciar y verificar la imagen real. Réplicas antiguas, pruebas y recuperación no deben retener versiones afectadas. Un arranque exitoso no prueba sustitución completa.

La investigación del periodo vulnerable debe identificar personas y servicios capaces de crear/modificar flujos, guardar configuraciones y revisar auditorías. Procesos hijos inesperados, intérpretes, cambios de archivos, conexiones salientes y reinicios merecen compararse con lo normal. Son pistas de revisión, no indicadores públicos universales de esta CVE.

La instalación describe JWT firmados y servicios Gateway/Agent Platform separados con pares de claves distintos. Hay que evaluar ambos, confianza y claves/configuración de ejecución. Una credencial no representa todo el sistema. Secretos accesibles a un proceso comprometido pueden requerir rotación si pruebas o exposición lo justifican.

Deben mapearse instancia GitLab, servidores de modelos, vigilancia y sistemas internos accesibles. Prompts derivados de código y contexto de incidencias pueden ser sensibles aunque el contenedor almacene poco. Salida limitada, identidades de cargas, archivos de solo lectura y privilegios mínimos contienen efectos sin corregir plantillas ni sustituir actualización.

Autohospedar divide trabajo entre plataforma, modelos, contenedores y red. Una imagen sin responsable puede quedar entre equipos. Lo gestionado reduce esta tarea específica del cliente, pero introduce otras compensaciones de proveedor, residencia y dependencia. El incidente no prueba que una opción sea siempre más segura.

Qué no demuestra el registro público

Los relatos no establecen explotación activa o extensa en producción, prueba de concepto pública, ruta detallada ni indicadores universales posteriores. Falta de confirmación pública no confirma ausencia de ataques. La ejecución reconocida por el proveedor y la clasificación crítica bastan para reparar sin prolongar exposición.

Las próximas pruebas deben incluir adopción verificada, explicación de causa de GitLab y telemetría creíble o nuevas guías oficiales. Tras dar tiempo a actualizar, los detalles pueden distinguir ruta separada, bypass o regresión. Los registros locales deben guardar imágenes antigua/nueva, reinicio, validación y responsables junto a historial y configuración.

La prueba práctica es saber qué gateways existen, quién podía cambiar flujos y qué activos o secretos alcanza cada proceso. Middleware IA requiere disciplina como runners CI, repositorios de artefactos y gestores de secretos. La localización de datos se convierte en control cuando la organización inventaría, corrige, aísla e investiga el servicio que actúa.

Fuentes y lecturas relacionadas

Registro CVE-2026-90970 · Documentación AI Gateway · Debilidad de plantillas CWE-1336 · Arquitectura Duo autohospedada · Instalación y claves de firma · CVE-2026-1868 anterior · Guía de registros de incidentes · Registro original de descubrimiento

Fuentes

Explorar el directorio de herramientas →