CVE-2026-41492: Dgraph Authentication Bypass Vulnerability

CRITICAL
Advisory Identifier: GHSA-vvf7-6rmr-m29q
CVSS 9.8
CWE-200
Published
Advisory Summary

CVE-2026-41492 is a CRITICAL (CVSS 9.8) authentication bypass vulnerability (CWE-200: Exposure of Sensitive Information to an Unauthorized Actor) affecting Dgraph libraries in the Go ecosystem. The issue involves unauthenticated admin token disclosure leading to authentication bypass via /debug/vars. Remediation is available by upgrading affected packages to version 25.3.3.

CVE-2026-41492 at a Glance

CVE Identifier CVE-2026-41492
GHSA Identifier GHSA-vvf7-6rmr-m29q
Severity CRITICAL
CVSS v3.1 Base Score 9.8
CWE Classification CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
Affected Product Dgraph
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 9.8

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity High (I:H)
Availability High (A:H)

How to Fix CVE-2026-41492

To remediate this vulnerability, upgrade all affected Dgraph dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/dgraph-io/dgraph/v25 fixed: 25.3.3
Upgrade github.com/dgraph-io/dgraph/v25 to 25.3.3
github.com/dgraph-io/dgraph/v24 fixed: Latest secure release
Upgrade github.com/dgraph-io/dgraph/v24 to Latest secure release
github.com/dgraph-io/dgraph fixed: Latest secure release
Upgrade github.com/dgraph-io/dgraph to Latest secure release
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/dgraph-io/dgraph/v25

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-41492, inspect your project dependencies for Dgraph:

inspect dependencies for github.com/dgraph-io/dgraph/v25

Analyze the terminal output to locate any version of Dgraph in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 25.3.3), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, where the product exposes sensitive information to an actor that is not explicitly authorized to have access to that information. In Dgraph, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### 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.

CVE-2026-41492 Affected Dgraph Versions

3 component(s)
Fixed Versions:
25.3.3
Product / Package Ecosystem Affected Versions Fixed Version
github.com/dgraph-io/dgraph/v25
Go
< 25.3.3
25.3.3
github.com/dgraph-io/dgraph/v24
Go
≤ 24.1.8
github.com/dgraph-io/dgraph
Go
≤ 1.2.8

References

Frequently Asked Questions

What is CVE-2026-41492?
CVE-2026-41492 is a security vulnerability in Dgraph involving Unauthenticated Admin Token Disclosure Leading to Authentication Bypass via /debug/vars under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor.
Which Dgraph versions are affected?
Affected versions include releases prior to 25.3.3 across affected packages: github.com/dgraph-io/dgraph/v25, github.com/dgraph-io/dgraph/v24, github.com/dgraph-io/dgraph.
What version fixes CVE-2026-41492?
Upgrading to 25.3.3 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/dgraph-io/dgraph/v25 affected?
Yes, github.com/dgraph-io/dgraph/v25 is affected in releases prior to 25.3.3. Upgrade your dependency to 25.3.3 or later.
Is github.com/dgraph-io/dgraph/v24 affected?
Yes, github.com/dgraph-io/dgraph/v24 is affected in releases prior to Latest secure release. Upgrade your dependency to Latest secure release or later.
What is the CVSS score of CVE-2026-41492?
CVE-2026-41492 has a CVSS v3.1 base score of 9.8 (CRITICAL) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
What CWE is associated with CVE-2026-41492?
CVE-2026-41492 is classified under CWE-200: Exposure of Sensitive Information to an Unauthorized Actor (The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.).
How can I check Go dependencies for CVE-2026-41492?
Run the dependency tree command: 'inspect dependencies for github.com/dgraph-io/dgraph/v25'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-vvf7-6rmr-m29q",
  "modified" : "2026-05-04T20:08:42Z",
  "published" : "2026-04-24T16:15:28Z",
  "aliases" : [ "CVE-2026-41492" ],
  "summary" : "Dgraph: Unauthenticated Admin Token Disclosure Leading to Authentication Bypass via /debug/vars",
  "details" : "### Summary\nDgraph `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.\n\nThis 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.\n\n### Details\nAlpha still exposes Go's default HTTP mux:\n\n- `x/metrics.go`\n  - imports `expvar`\n  - initializes `Conf = expvar.NewMap(\"dgraph_config\")`\n- Go's `expvar` package automatically registers `/debug/vars`\n- `expvar` publishes:\n  - `cmdline = os.Args`\n  - `memstats = runtime.Memstats`\n\nAlpha's HTTP handler explicitly blocks only the old CVE path:\n\n- `dgraph/cmd/alpha/run.go`\n  - checks `if r.URL.Path == \"/debug/pprof/cmdline\"` and returns `404`\n  - otherwise falls through to `http.DefaultServeMux.ServeHTTP(w, r)`\n\nAdmin endpoints still trust the leaked token:\n\n- `dgraph/cmd/alpha/admin.go`\n  - reads `X-Dgraph-AuthToken`\n  - compares it to `worker.Config.AuthToken`\n### PoC\n1. Send an unauthenticated request to Alpha:\n\n```http\nGET /debug/vars HTTP/1.1\nHost: target:8080\n```\n\n2. Parse the JSON response and read the `cmdline` field.\n\n3. Extract the admin token from the startup arguments, for example:\n\n```text\n--security token=debug-vars-secret;\n```\n\n4. Replay the token to an admin-only endpoint:\n\n```http\nGET /admin/config/cache_mb HTTP/1.1\nHost: target:8080\nX-Dgraph-AuthToken: debug-vars-secret\n```\n\n5. The request is accepted as an authorized admin request.\n\nThis was reproduced against `dgraph/dgraph:v25.3.2` in Docker.\n\nObserved behavior:\n\n- unauthenticated `/debug/vars` leaked the configured token\n- replaying the leaked token in `X-Dgraph-AuthToken` successfully accessed `/admin/config/cache_mb`\n- response body was:\n\n```text\n4096\n```\n\nIt was verified that the old CVE path appears specifically patched in the same version:\n\n- `/debug/pprof/cmdline` returned `404 Not Found`\n- `/debug/pprof/` remained reachable\n\n### Impact\nUnauthenticated attackers can obtain the Alpha admin token and gain unauthorized administrative access.\n\nThis enables privileged admin operations such as:\n\n- reading privileged admin configuration\n- mutating admin configuration\n- performing operational control actions gated by `X-Dgraph-AuthToken`\n\nIn deployments where the Alpha HTTP port is reachable by untrusted parties, this is a practical authentication bypass to admin functionality.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/dgraph-io/dgraph/v25"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "25.3.3"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/dgraph-io/dgraph/v24"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "last_affected" : "24.1.8"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/dgraph-io/dgraph"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "last_affected" : "1.2.8"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/dgraph-io/dgraph/security/advisories/GHSA-vvf7-6rmr-m29q"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-41492"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/dgraph-io/dgraph"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/dgraph-io/dgraph/releases/tag/v25.3.3"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-200" ],
    "severity" : "CRITICAL",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-04-24T16:15:28Z",
    "nvd_published_at" : "2026-04-24T19:17:14Z"
  }
}