diff --git a/advisories/github-reviewed/2026/09/GHSA-2v4p-qf9q-27wj/GHSA-2v4p-qf9q-27wj.json b/advisories/github-reviewed/2026/09/GHSA-2v4p-qf9q-27wj/GHSA-2v4p-qf9q-27wj.json index 00705c0212d4..ef8b5009c2a5 100644 --- a/advisories/github-reviewed/2026/09/GHSA-2v4p-qf9q-27wj/GHSA-2v4p-qf9q-27wj.json +++ b/advisories/github-reviewed/2026/09/GHSA-2v4p-qf9q-27wj/GHSA-2v4p-qf9q-27wj.json @@ -7,7 +7,7 @@ "CVE-2026-84445" ], "summary": "gRPC-Go xDS servers: Denial of Service (DoS) via crash due to missing `:authority` and `Host` headers", - "details": "A vulnerability exists in gRPC-Go servers configured with `xds.NewGRPCServer()` where a crafted request missing both `:authority` and `Host` headers can cause a server panic, resulting in a Denial of Service (DoS).\n\nServers built with `xds.NewGRPCServer` install an xDS routing interceptor on every RPC. This interceptor looks up the request’s `:authority` header to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither `:authority` nor `Host`. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.\n\nThis panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.\n- Insecure/Standard TLS: If the server permits insecure (plaintext) connections or standard credentials (where client certs are not checked), any unauthenticated remote attacker can trigger the crash.\n- mTLS / ALTS: If strict transport-level authentication is enforced at the network edge or transport layer (e.g., requiring a valid client certificate), the attacker must possess valid transport credentials to initiate the stream and trigger the panic.\n\n### Impact\nAn attacker can cause a complete outage of the gRPC server by sending a request missing both `:authority` and `Host` headers, provided they can successfully establish a transport connection.\n\n### Patches\nThe issue has been addressed in `master` (and backported to `1.83.2` and `1.82.2`). The fix updates the HTTP/2 transport layer to reject requests missing both `:authority` and `Host` headers early, maintaining consistency with and other gRPC language implementations.", + "details": "A vulnerability exists in gRPC-Go servers configured with `xds.NewGRPCServer()` where a crafted request missing both `:authority` and `Host` headers can cause a server panic, resulting in a Denial of Service (DoS).\n\nServers built with `xds.NewGRPCServer` install an xDS routing interceptor on every RPC. This interceptor looks up the request’s `:authority` header to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither `:authority` nor `Host`. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.\n\nThis panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.\n- Insecure/Standard TLS: If the server permits insecure (plaintext) connections or standard credentials (where client certs are not checked), any unauthenticated remote attacker can trigger the crash.\n- mTLS / ALTS: If strict transport-level authentication is enforced at the network edge or transport layer (e.g., requiring a valid client certificate), the attacker must possess valid transport credentials to initiate the stream and trigger the panic.\n\n### Impact\nAn attacker can cause a complete outage of the gRPC server by sending a request missing both `:authority` and `Host` headers, provided they can successfully establish a transport connection.\n\n### Patches\nThe issue has been addressed in `master` and backported to `1.82.2`, `1.83.2`, and `1.84.0`. The `1.84.x` backport first appears in `1.84.0-dev.0.20260825144003-d5a41119e0e3`; the main-branch fix first appears in `1.85.0-dev.0.20260825072537-93e31b48545e`. The fix updates the HTTP/2 transport layer to reject requests missing both `:authority` and `Host` headers early, maintaining consistency with and other gRPC language implementations.", "severity": [], "affected": [ { @@ -60,6 +60,25 @@ { "introduced": "1.84.0-dev" }, + { + "fixed": "1.84.0-dev.0.20260825144003-d5a41119e0e3" + } + ] + } + ] + }, + { + "package": { + "ecosystem": "Go", + "name": "google.golang.org/grpc" + }, + "ranges": [ + { + "type": "ECOSYSTEM", + "events": [ + { + "introduced": "1.85.0-dev" + }, { "fixed": "1.85.0-dev.0.20260825072537-93e31b48545e" } @@ -112,6 +131,18 @@ { "type": "WEB", "url": "https://github.com/grpc/grpc-go/releases/tag/v1.83.2" + }, + { + "type": "WEB", + "url": "https://github.com/grpc/grpc-go/pull/9370" + }, + { + "type": "WEB", + "url": "https://github.com/grpc/grpc-go/commit/d5a41119e0e3189ea913cf839586ce34a44f1a3f" + }, + { + "type": "WEB", + "url": "https://github.com/grpc/grpc-go/releases/tag/v1.84.0" } ], "database_specific": {