Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
🐹 Go

GHSA-vvf7-6rmr-m29q

CRITICAL

GHSA-vvf7-6rmr-m29q is a critical-severity (CVSS 9.8) vulnerability in github.com/dgraph-io/dgraph/v25. O3 Security confirms whether GHSA-vvf7-6rmr-m29q is actually reachable in your code before you act, and blocks exploitation at runtime until you patch.

Dgraph: Unauthenticated Admin Token Disclosure Leading to Authentication Bypass via /debug/vars

Also known asCVE-2026-41492GO-2026-5675
Published
Apr 24, 2026
Updated
Jul 23, 2026
Affected
3 pkgs
Patched
1 / 3
Exploits
None indexed

Real-World Exposure

3 pkgs affected
🐹github.com/dgraph-io/dgraph/v25🐹github.com/dgraph-io/dgraph/v24🐹github.com/dgraph-io/dgraph

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.

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:
GET /debug/vars HTTP/1.1
Host: target:8080
  1. Parse the JSON response and read the cmdline field.

  2. Extract the admin token from the startup arguments, for example:

--security token=debug-vars-secret;
  1. Replay the token to an admin-only endpoint:
GET /admin/config/cache_mb HTTP/1.1
Host: target:8080
X-Dgraph-AuthToken: debug-vars-secret
  1. 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:
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.

Affected Packages

3 total 1 fixed
EcosystemPackageVulnerable rangeFix
🐹Gogithub.com/dgraph-io/dgraph/v25all versions25.3.3
🐹Gogithub.com/dgraph-io/dgraph/v24all versionsNo fix
🐹Gogithub.com/dgraph-io/dgraphall versionsNo fix

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/dgraph-io/dgraph/v25. O3's reachability analysis confirms whether the vulnerable code path is actually invoked in your application, so you act on real exposure instead of every transitive match.

  2. Fix

    Update github.com/dgraph-io/dgraph/v25 to 25.3.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-vvf7-6rmr-m29q is resolved across your whole dependency graph.

  3. Workarounds

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

  4. How O3 protects you

    O3 pinpoints whether GHSA-vvf7-6rmr-m29q is reachable in your code and exactly where to fix it, then blocks exploitation in production at runtime until the patched version is deployed.

Tailored to GHSA-vvf7-6rmr-m29q. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.

Frequently Asked Questions

### 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. ##
O3 Security · Impact-Aware SCA

Is GHSA-vvf7-6rmr-m29q in your dependencies?

O3 detects GHSA-vvf7-6rmr-m29q across Go dependencies and uses function-level reachability to confirm whether the vulnerable code path is actually reachable — not just present. No false positives.