GitHub Advisoryadvisory · Go

GHSA-vvf7-6rmr-m29q Dgraph: Unauthenticated Admin Token Disclosure Leading to Authentication Bypass via /debug/vars

CRITICAL Published 2026-04-24 Modified 2026-05-04 Official page ↗
Aliases
CVE-2026-41492
Ecosystem
Go
Packages
github.com/dgraph-io/dgraph/v25, github.com/dgraph-io/dgraph/v24, github.com/dgraph-io/dgraph
Severity
Critical
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weaknesses
CWE-200
Reviewed
2026-04-24

Affected packages

• Go github.com/dgraph-io/dgraph/v25: < 25.3.3 → fixed in 25.3.3 • Go github.com/dgraph-io/dgraph/v24: <= 24.1.8 (no fix yet) • Go github.com/dgraph-io/dgraph: <= 1.2.8 (no fix yet)

Description

Summary Dgraph `v25.3.2` still exposes the process command line through the unauthenticated `/debug/vars` endpoint on Alpha. Because the admin token is commonly supplied via the `--security "token=..."` startup flag, an unauthenticated attacker can retrieve that token and replay it in the `X-Dgraph-AuthToken` header to access admin-only endpoints. This is a variant of the previously fixed `/debug/pprof/cmdline` issue, but the current fix is incomplete because it blocks only `/debug/pprof/cmdline` and still serves `http.DefaultServeMux`, which includes `expvar`'s `/debug/vars` handler. Details Alpha still exposes Go's default HTTP mux: • `x/metrics.go` • imports `expvar` • initializes `Conf = expvar.NewMap("dgraph_config")` • Go's `expvar` package automatically registers `/debug/vars` • `expvar` publishes: • `cmdline = os.Args` • `memstats = runtime.Memstats` Alpha's HTTP handler explicitly blocks only the old CVE path: • `dgraph/cmd/alpha/run.go` • checks `if r.URL.Path == "/debug/pprof/cmdline"` and returns `404` • otherwise falls through to `http.DefaultServeMux.ServeHTTP(w, r)` Admin endpoints still trust the leaked token: • `dgraph/cmd/alpha/admin.go` • reads `X-Dgraph-AuthToken` • compares it to `worker.Config.AuthToken` PoC 1. Send an unauthenticated request to Alpha: ```http GET /debug/vars HTTP/1.1 Host: target:8080 ``` 2. Parse the JSON response and read the `cmdline` field. 3. Extract the admin token from the startup arguments, for example: ```text --security token=debug-vars-secret; ``` 4. Replay the token to an admin-only endpoint: ```http GET /admin/config/cache_mb HTTP/1.1 Host: target:8080 X-Dgraph-AuthToken: debug-vars-secret ``` 5. The request is accepted as an authorized admin request. This was reproduced against `dgraph/dgraph:v25.3.2` in Docker. Observed behavior: • unauthenticated `/debug/vars` leaked the configured token • replaying the leaked token in `X-Dgraph-AuthToken` successfully accessed `/admin/config/cache_mb` • response body was: ```text 4096 ``` It was verified that the old CVE path appears specifically patched in the same version: • `/debug/pprof/cmdline` returned `404 Not Found` • `/debug/pprof/` remained reachable Impact Unauthenticated attackers can obtain the Alpha admin token and gain unauthorized administrative access. This enables privileged admin operations such as: • reading privileged admin configuration • mutating admin configuration • performing operational control actions gated by `X-Dgraph-AuthToken` In deployments where the Alpha HTTP port is reachable by untrusted parties, this is a practical authentication bypass to admin functionality.

Related

Alias · CVE (1)

  • CVE-2026-41492 Dgraph is an open source distributed GraphQL database. vulnerability

Weakness · CWE (1)

  • CWE-200 Exposure of Sensitive Information to an Unauthorized Actor weakness

References