Detecta o CVE-2026-19478 no GitLab CE/EE com um template Nuclei não destrutivo que aciona a invocação do método de campo de fallback do GraphQL via touch e confirma instâncias vulneráveis sem chamadas destrutivas.
Template de detecção Nuclei não destrutivo para CVE-2026-19478, uma falha crítica (CVSS 9.4) de invocação arbitrária de método não autenticada na API GraphQL do GitLab, corrigida pelo GitLab em 17 de agosto de 2026.
O esquema GraphQL do GitLab suporta uma diretiva @gl_introduced(version: "X.Y.Z") que restringe um campo a uma versão mínima do GitLab. Quando a diretiva faz referência a uma versão que a instância em execução, o GitLab gera um para o nome do campo (de outra forma desconhecido). Esse resolvedor de fallback chama diretamente no objeto Ruby subjacente — , e afins — .
object.public_send(method_name)ProjectUserO resultado: um atacante não autenticado que consiga acessar /api/graphql e conheça o fullPath de qualquer projeto público (ou o nome de usuário de qualquer perfil público) pode invocar qualquer método público sem argumentos nesse objeto. Isso inclui métodos somente leitura como touch, mas também destrutivos como destroy / delete, e os que alteram estado, como deactivate / block / ban.
O template deste repositório chama apenas touch (atualiza updated_at, retorna true) — veja Segurança abaixo.
| Série | Afetada | Corrigida |
|---|---|---|
| 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 |
Apenas GitLab CE/EE autogerenciado — GitLab.com e GitLab Dedicated não foram afetados.
Este template é propositalmente neutralizado para varrer frotas de servidores que você está autorizado a testar:
touch por meio do campo de fallback (um método ActiveRecord que apenas atualiza updated_at e retorna true).destroy, delete, deactivate, block ou ban — todos acessíveis pela mesma falha e genuinamente destrutivos.root padrão. Se nenhum estiver acessível, simplesmente relata "não detectado" em vez de adivinhar.Não reutilize a consulta GraphQL deste template para chamar métodos de mutação contra sistemas que você não possui ou para os quais não possui autorização escrita explícita para testar.
| Etapa | Requisição | Objetivo |
|---|---|---|
| 1 | GET /api/v4/projects?visibility=public | Encontra um projeto público para usar como alvo inofensivo |
| 2 | POST /api/graphql — touch @gl_introduced(version: "999.0.0") nesse projeto | Aciona o resolvedor de campo de fallback; uma instância vulnerável retorna "touch": true |
| 3 (fallback) | POST /api/graphql — mesma consulta contra user(username: "root") | Usado apenas se nenhum projeto público foi encontrado na etapa 1 |
Uma instância corrigida rejeita o campo desconhecido de imediato ("... doesn't exist on type ..."), portanto o matcher do template exige o sinal positivo de touch e a ausência dessa mensagem de rejeição.
# 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
Requer nuclei v3 (este template usa o bloco de protocolo http: e um extrator json no estilo jq introduzidos no mecanismo de templates v3; ele não carregará no nuclei v2.x).
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
Atualize para 18.11.11, 19.0.8, 19.1.6 ou 19.2.4 (ou versões posteriores). Consulte as notas de lançamento do patch 19.2.4 do GitLab para obter o aviso completo.
Este template é publicado para fins de segurança defensiva — varredura de infraestrutura que você possui ou para a qual está explicitamente autorizado a testar. Executá-lo (ou o PoC vinculado) contra sistemas sem autorização é ilegal na maioria das jurisdições. O autor não assume nenhuma responsabilidade pelo uso indevido.