CVE-2026-41328Dgraph 是一个开源分布式 GraphQL 数据库。在 25.3.3 版本之前,该产品存在一个严重的安全漏洞,允许未经身份验证的攻击者在默认配置(未启用 ACL)下读取数据库中的所有数据。攻击者通过向 8080 端口发送特制的 HTTP POST 请求,利用 DQL 注入漏洞绕过安全检查。这种未经授权的访问可能导致大规模的数据泄露风险,且无需任何用户交互即可被利用。
漏洞核心在于 Dgraph 处理带有语言标签的 JSON mutation 时存在输入验证缺失。具体而言,`edgraph/server.go` 文件中的 `addQueryIfUnique` 函数利用 `fmt.Sprintf` 拼接 DQL 查询语句,直接使用了未经清洗的 `predicateName`。攻击者利用 `x.PredicateLang()` 解析 JSON key 中 `@` 后的文本作为语言标签,且该过程缺乏任何有效性验证。攻击链分为两步:首先,攻击者向 `/alter` 端点发送请求,创建包含 `@unique @index(exact) @lang` 的 schema predicate;其次,向 `/mutate?commitNow=true` 端点发送特制的 JSON payload,其中 key 设计为 `predicateName@PAYLOAD`。在这个 payload 中,攻击者注入右括号 `)` 以闭合原有的 `eq()` 函数调用,随后插入恶意的 DQL 查询块,并使用 `#` 符号注释掉模板字符串中剩余的语法结构。这种注入手法使得攻击者能够执行任意只读 DQL 查询,从而绕过认证机制获取数据库内所有敏感数据。