
Detecta CVE-2026-19478 en GitLab CE/EE con una plantilla Nuclei no destructiva que activa la invocación del método fallback-field de GraphQL mediante touch y confirma instancias vulnerables sin llamadas destructivas.
Plantilla de detección no destructiva de Nuclei para CVE-2026-19478, una vulnerabilidad crítica (CVSS 9.4) de invocación arbitraria de métodos sin autenticación en la API GraphQL de GitLab, corregida por GitLab el 17 de agosto de 2026.
El esquema GraphQL de GitLab admite una directiva @gl_introduced(version: "X.Y.Z") que restringe un campo a una versión mínima de GitLab. Cuando la directiva hace referencia a una versión más reciente que la instancia en ejecución, GitLab genera un campo de reserva para el nombre de campo (que de otro modo sería desconocido). Ese resolver de reserva llama a object.public_send(method_name) directamente sobre el objeto Ruby subyacente — Project, User y similares — sin volver a comprobar la autorización.
El resultado: un atacante no autenticado que pueda acceder a /api/graphql y conozca el fullPath de cualquier proyecto público (o el nombre de usuario de cualquier perfil público) puede invocar cualquier método público sin argumentos en ese objeto. Eso incluye métodos de solo lectura como touch, pero también destructivos como destroy / delete, y mutadores de estado como deactivate / block / ban.
La plantilla de este repositorio solo llama a touch (actualiza updated_at, devuelve true) — consulte Seguridad a continuación.
Solo GitLab CE/EE autoadministrado — GitLab.com y GitLab Dedicated no se vieron afectados.
Esta plantilla está deliberadamente desarmada para escanear flotas de servidores que tenga autorización para probar:
touch a través del campo de reserva (un método de ActiveRecord que simplemente actualiza updated_at y devuelve true).destroy, delete, deactivate, block ni ban — todos ellos accesibles a través de la misma vulnerabilidad y genuinamente destructivos.root por defecto. Si ninguno es accesible, simplemente informa "not detected" en lugar de adivinar.No reutilice la consulta GraphQL de esta plantilla para invocar métodos mutadores contra sistemas que no sean suyos o para los que no tenga autorización escrita explícita para probar.
Una instancia parcheada rechaza el campo desconocido de plano ("... doesn't exist on type ..."), por lo que el matcher de la plantilla requiere la señal positiva de touch y la ausencia de ese mensaje de rechazo.
# single target
nuclei -t CVE-2026-19478.yaml -u https://gitlab.example.com
# validate the template itself
nuclei -t CVE-2026-19478.yaml -validate
# a list of targets, JSON output
nuclei -t CVE-2026-19478.yaml -l targets.txt -j -o results.json
Requiere nuclei v3 (esta plantilla utiliza el bloque de protocolo http: y un extractor json de estilo jq introducidos en el motor de plantillas v3; no se cargará en nuclei v2.x).
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
Actualice a 18.11.11, 19.0.8, 19.1.6 o 19.2.4 (o posterior). Consulte las notas de la versión de parche 19.2.4 de GitLab para ver el aviso completo.
Esta plantilla se publica con fines de seguridad defensiva: escanear infraestructura que usted posea o para la que esté explícitamente autorizado a realizar pruebas. Ejecutarla (o el PoC enlazado) contra sistemas sin autorización es ilegal en la mayoría de las jurisdicciones. El autor no asume ninguna responsabilidad por el mal uso.
| Serie | Afectadas | Corregida |
|---|
| 18.2.x – 18.11.x | >= 18.2, < 18.11.11 | 18.11.11 |
| 19.0.x | < 19.0.8 | 19.0.8 |
| 19.1.x | < 19.1.6 | 19.1.6 |
| 19.2.x | < 19.2.4 | 19.2.4 |
| Paso | Solicitud | Propósito |
|---|
| 1 | GET /api/v4/projects?visibility=public | Buscar un proyecto público para usarlo como objetivo inofensivo |
| 2 | POST /api/graphql — touch @gl_introduced(version: "999.0.0") en ese proyecto | Activar el resolver del campo de reserva; una instancia vulnerable devuelve "touch": true |
| 3 (reserva) | POST /api/graphql — misma consulta contra user(username: "root") | Se usa solo si no se encontró ningún proyecto público en el paso 1 |