{"id":"GHSA-vvf7-6rmr-m29q","revision":"dc9c7581a6664d3284b50dc23c07f127","records":[{"revision":"dc9c7581a6664d3284b50dc23c07f127","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-vvf7-6rmr-m29q","aliases":["CVE-2026-41492","GO-2026-5675"],"title":"Dgraph: Unauthenticated Admin Token Disclosure Leading to Authentication Bypass via /debug/vars","description":"### 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.","state":0,"publishedAt":"2026-04-24T16:15:28+00:00","modifiedAt":"2026-09-10T03:51:03.4635207+00:00","affected":[{"ecosystem":"Go","name":"github.com/dgraph-io/dgraph/v25","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"25.3.3"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/dgraph-io/dgraph/v24","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"last_affected","version":"24.1.8"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/dgraph-io/dgraph","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"last_affected","version":"1.2.8"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"CRITICAL"}],"references":["https://github.com/dgraph-io/dgraph/security/advisories/GHSA-vvf7-6rmr-m29q","https://nvd.nist.gov/vuln/detail/CVE-2026-41492","https://github.com/dgraph-io/dgraph","https://github.com/dgraph-io/dgraph/releases/tag/v25.3.3"],"sourceUrl":"https://github.com/advisories/GHSA-vvf7-6rmr-m29q","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-vvf7-6rmr-m29q","identifiers":["GHSA-vvf7-6rmr-m29q","CVE-2026-41492","GO-2026-5675"]},"retained":false,"historicalAffected":[]}],"coverage":[]}