Summary
CVE-2026-84304 is an Uncontrolled Resource Consumption (CWE-400) vulnerability in grpc-go, the Go language implementation of gRPC, affecting all versions prior to 1.83.1. An unauthenticated remote attacker can send crafted HTTP/2 DATA frames split into millions of one-byte fragments to exhaust server heap memory and crash the process. The issue carries a CVSS score of 8.7 (High) with a network attack vector, no authentication required, and a high availability impact.
Technical details
- Root cause: In
internal/transport/transport.go, grpc-go stores each fragmented HTTP/2 DATA frame as a separaterecvMsgentry in the connection’srecvBuffer, rather than coalescing small fragments. Every fragment incurs its own internal tracking structure and queue allocation overhead, independent of the actual payload size. - Trigger conditions: An attacker opens one or more gRPC streams and sends payload data fragmented into an extremely large number of very small (as small as one byte) HTTP/2 DATA frames. This can be done even while staying within the configured connection and stream flow-control windows, so standard flow-control limits do not prevent the attack.
- Attack vector: Network-based, unauthenticated. Using concurrent multiplexed streams amplifies the effect further.
- Impact: Excessive heap memory consumption on the gRPC server, leading to out-of-memory conditions and runtime panics — a denial of service. No confidentiality or integrity impact has been identified.
Affected software
google.golang.org/grpc(grpc-go) — all versions prior to 1.83.1
Severity
- CVSS Score: 8.7 (High)
- Reported vector characteristics: Network attack vector, low attack complexity, no privileges required, no user interaction, and a high impact to availability with no impact to confidentiality or integrity.
Mitigation and recommended actions
- Immediate: Upgrade
google.golang.org/grpcto version 1.83.1 or later, which introduces receive-buffer compaction that coalesces consecutive small data fragments into larger pooled buffers before they consume per-fragment tracking overhead. - If immediate patching is not possible: Receive-buffer compaction is enabled by default in the fixed release; it can temporarily be toggled via the
GRPC_GO_EXPERIMENTAL_ENABLE_RECEIVE_BUFFER_COMPACTIONenvironment variable while validating the update in staging, but this escape hatch is expected to be removed in a future release and should not be relied on long-term. - As a general network-layer mitigation, consider limiting the number of concurrent streams per connection and monitoring/alerting on abnormal memory growth on gRPC-Go services until the patch is deployed.
- Prioritize patching internet-exposed gRPC-Go services, given the unauthenticated, network-reachable nature of this flaw.

