{"id":"GHSA-xg4h-6gfc-h4m8","summary":"etcd: Watch API authorization bypass via open-ended range requests","details":"### Impact\n_What kind of vulnerability is it? Who is impacted?_\n\nA user granted READ permission on a single, exact key can use the Watch gRPC API with `clientv3.WithFromKey()` (an open-ended, \"from this key to the end of the keyspace\" watch) to receive watch events for every key lexicographically greater than or equal to their permitted key — not just the one key they were granted. \n\nThis is an authorization bypass in etcd's RBAC enforcement for the Watch API; Range/Get and DeleteRange requests are not affected. It only affects clusters with authentication enabled — clusters running without auth already allow unrestricted read access.\n\n### Patches\n_Has the problem been patched? What versions should users upgrade to?_\n\nThis vulnerability is patched in the following versions:\n\n- etcd 3.7.1\n- etcd 3.6.14\n- etcd 3.5.33\n\n### Workarounds\n_Is there a way for users to fix or remediate the vulnerability without upgrading?_\n\nIf upgrading is not immediately possible, the following mitigations reduce exposure:\n\n- Audit READ grants. Any READ grant — even on one key — can be leveraged via Watch to read everything after it. Review who holds READ permissions and revoke/tighten any you wouldn't trust with full read access.\n- Restrict network access. Limit which hosts can reach etcd's client (gRPC) port via firewall rules or network policy, reducing who can attempt exploitation.\n\n### Reporter\n\n- Luis Toro ([@lobuhi](https://github.com/lobuhi) on Github)\n- Anthropic  and Adam Korczynski ([@AdamKorcz](https://github.com/AdamKorcz) on Github)","aliases":["BIT-etcd-2026-73499","CVE-2026-73499","GO-2026-6114"],"modified":"2026-08-18T17:25:53.230800452Z","published":"2026-07-24T22:38:22Z","database_specific":{"github_reviewed_at":"2026-07-24T22:38:22Z","nvd_published_at":null,"cwe_ids":["CWE-863"],"severity":"HIGH","github_reviewed":true},"references":[{"type":"WEB","url":"https://github.com/etcd-io/etcd/security/advisories/GHSA-xg4h-6gfc-h4m8"},{"type":"WEB","url":"https://github.com/etcd-io/etcd/commit/6643f80602461a6095c9b294b6512fd9719bef41"},{"type":"WEB","url":"https://github.com/etcd-io/etcd/commit/afeaa624da19085b47fb5ccc7c22a8c421bc2eae"},{"type":"WEB","url":"https://github.com/etcd-io/etcd/commit/e863b001bbf3367003a543aa3099db9892134cd7"},{"type":"PACKAGE","url":"https://github.com/etcd-io/etcd"},{"type":"WEB","url":"https://github.com/etcd-io/etcd/releases/tag/v3.5.33"},{"type":"WEB","url":"https://github.com/etcd-io/etcd/releases/tag/v3.6.14"},{"type":"WEB","url":"https://github.com/etcd-io/etcd/releases/tag/v3.7.1"}],"affected":[{"package":{"name":"go.etcd.io/etcd/v3","ecosystem":"Go","purl":"pkg:golang/go.etcd.io/etcd/v3"},"ranges":[{"type":"SEMVER","events":[{"introduced":"3.7.0-alpha.0"},{"fixed":"3.7.1"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-xg4h-6gfc-h4m8/GHSA-xg4h-6gfc-h4m8.json"}},{"package":{"name":"go.etcd.io/etcd/v3","ecosystem":"Go","purl":"pkg:golang/go.etcd.io/etcd/v3"},"ranges":[{"type":"SEMVER","events":[{"introduced":"3.6.0"},{"fixed":"3.6.14"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-xg4h-6gfc-h4m8/GHSA-xg4h-6gfc-h4m8.json"}},{"package":{"name":"go.etcd.io/etcd/v3","ecosystem":"Go","purl":"pkg:golang/go.etcd.io/etcd/v3"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"3.5.33"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-xg4h-6gfc-h4m8/GHSA-xg4h-6gfc-h4m8.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N"}]}