Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Gitlab-CVE-2026-19478 — Laboratório de exploits dockerizado e script para CVE-2026-19478, uma injeção crítica de código GraphQL não autenticada no GitLab que permite chamadas arbitrárias de métodos Ruby, exclusão de projetos e exfiltração de dados. | Kitploit
Ferramentas/GitHubGitHub/punitdarji/gitlab-cve-2026-19478
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de Segurança de APIsTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHub
punitdarji/gitlab-cve-2026-19478

Gitlab-CVE-2026-19478

Laboratório de exploits dockerizado e script para CVE-2026-19478, uma injeção crítica de código GraphQL não autenticada no GitLab que permite chamadas arbitrárias de métodos Ruby, exclusão de projetos e exfiltração de dados.

Ver Repositório
41há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-19478 — Injeção de Diretiva @gl_introduced no GraphQL do GitLab

Injeção Remota de Código sem Autenticação via Diretiva GraphQL no GitLab CE/EE — Exclua Qualquer Projeto Público com uma Única Requisição HTTP

Um laboratório prático de testes de penetração que reproduz o CVE-2026-19478, uma vulnerabilidade crítica (CVSS 9.4) na API GraphQL do GitLab. A diretiva @gl_introduced permite que atacantes não autenticados executem métodos Ruby arbitrários em objetos no lado do servidor — incluindo exclusão de projetos, exfiltração de dados e transferência de propriedade — sem nenhuma autenticação.

Este laboratório executa, em Docker, uma instância real e vulnerável do GitLab CE 19.2.0 para uma prática realista de exploração.

Índice

  • Resumo da Vulnerabilidade
  • Como Funciona a Exploração
  • Diagrama do Fluxo do Ataque
  • Configuração do Laboratório
  • Guia de Exploração
  • Uso do Script de Exploit
  • Detecção e Indicadores de Comprometimento
  • Remediação
  • Referências
  • Aviso Legal
  • Conecte-se Conosco

Resumo da Vulnerabilidade

CampoValor
ID do CVECVE-2026-19478
Pontuação CVSS9.4 (Crítico)
ProdutoGitLab Community Edition (CE) / Enterprise Edition (EE)
Tipo de VulnerabilidadeInjeção de Código / Execução Arbitrária de Métodos (CWE-94)
Vetor de AtaqueRede (Remoto)
AutenticaçãoNenhuma exigida
Interação do UsuárioNenhuma
Complexidade do AtaqueBaixa
Versões Afetadas18.2 – 18.11.10, 19.0 – 19.0.7, 19.1 – 19.1.5, 19.2 – 19.2.3
Versões Corrigidas18.11.11, 19.0.8, 19.1.6, 19.2.4
Descoberto Porhiimguardian (via HackerOne)
Data da Correção17 de agosto de 2026

Impacto

Um atacante remoto não autenticado pode:

  • Excluir permanentemente qualquer projeto público
  • Exfiltrar dados internos, tokens de administrador e segredos
  • Modificar a visibilidade, a propriedade e as configurações de projetos
  • Executar métodos Ruby arbitrários no modelo Project no lado do servidor
  • Arquivar ou transferir projetos sem autorização

Como Funciona a Exploração

A Diretiva @gl_introduced

O GitLab usa uma diretiva GraphQL personalizada @gl_introduced(version: "X.Y") para dar suporte a implantações contínuas (rolling deployments). Quando uma versão mais recente do GitLab adiciona um campo à API GraphQL, instâncias mais antigas tratam consultas que referenciam esses novos campos de forma graciosa, retornando null em vez de gerar erro.

O Caminho de Código Vulnerável

Arquivo: lib/gitlab/graphql/version_filter/future_field_fallback.rb (Linhas 14-36)

Análise passo a passo:

  1. O FutureFieldFilter examina as consultas GraphQL recebidas. Quando um campo possui @gl_introduced(version) com uma versão mais recente que a do servidor atual, ele remove o campo e define context[:contain_future_fields] = true.

  2. O IntroducedTracer restaura o documento de consulta original no momento da execução, recolocando os campos removidos de volta na AST.

  3. O FutureFieldFallback#get_field intercepta toda busca de campos durante a execução. Ele verifica três condições:

    • A flag contain_future_fields está definida? ✅
    • O campo está ausente no esquema? ✅
    • O nome NÃO começa com __? ✅
    • O nome do campo é seguro? ❌ Não existe nenhuma verificação!
  4. Quando todas as três verificações passam, ele sintetiza um novo GraphQL::Schema::Field sem classe de resolver.

  5. No graphql-ruby, um campo sem resolver é resolvido chamando object.public_send(field_name) no objeto Ruby subjacente — convertendo o nome do campo do atacante em uma chamada de método arbitrária no modelo Project do ActiveRecord.

A Correção (19.2.4+)

A correção do GitLab substitui o despacho implícito de métodos por um NilResolver explícito que retorna nil incondicionalmente, preservando a compatibilidade com implantações contínuas e eliminando a execução arbitrária de métodos:

# BEFORE (vulnerable) — no resolver → method dispatch
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type)
# → object.public_send(field_name) ← ARBITRARY METHOD CALL

# AFTER (patched) — explicit NilResolver
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type,
  resolver_class: NilResolver)  # ← always returns nil

Diagrama do Fluxo do Ataque

                    ATTACKER (unauthenticated)
                              │
                              │  POST /api/graphql
                              │  { project(fullPath: "victim/repo") {
                              │      name
                              │      destroy @gl_introduced(version: "99.0")
                              │  }}
                              │
                              ▼
               ┌──────────────────────────────┐
               │     GitLab GraphQL API        │
               │     (no auth required)        │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   1. FutureFieldFilter        │
               │   "destroy" has @gl_introduced│
               │   version 99.0 > 19.2.0      │
               │   → Strip field              │
               │   → Set contain_future_fields │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   2. IntroducedTracer         │
               │   → Restore original query   │
               │   "destroy" is back in AST   │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   3. FutureFieldFallback      │
               │   "destroy" not in schema? ✓  │
               │   Flag set? ✓                 │
               │   Not __introspection? ✓      │
               │   → Synthesize field          │
               │   → NO RESOLVER attached      │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   4. graphql-ruby resolution  │
               │   No resolver found →         │
               │   object.public_send(:destroy)│
               │                               │
               │   Project.find("victim/repo") │
               │          .destroy()           │
               │                               │
               │   ██ PROJECT DELETED ██        │
               └──────────────────────────────┘

Configuração do Laboratório

Pré-requisitos

  • Docker e Docker Compose instalados
  • Mínimo de 4 GB de RAM disponíveis para o Docker (o GitLab consome muitos recursos)
  • Python 3 (para o script de exploit)
  • Navegador web ou curl / httpie para testar a API

Início Rápido — GitLab CE 19.2.0 Real (Vulnerável)

# Clone or navigate to the lab directory
cd CVE-2026-19478

# Pull and start the vulnerable GitLab instance
docker compose up -d

# Wait for GitLab to fully start (3-5 minutes on first boot)
# Monitor startup progress:
docker logs -f gitlab-vulnerable

# Once you see "gitlab Reconfigured!" in logs, set up test projects:
bash setup-lab.sh

Pontos de Acesso

Baixar ferramenta