CVE-2026-33814
High · 7.5CVSS
7.5
EPSS
0.8%
Published
May 7, 2026
CISA due date
—
Cloudanix analysis
A malicious HTTP/2 connection can cause some Go-based software to get stuck in a resource-draining loop and become unavailable.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Network Service
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a network-reachable denial-of-service flaw in Go HTTP/2 handling. When a Go HTTP/2 transport processes a malicious SETTINGS frame where SETTINGS_MAX_FRAME_SIZE is set to 0, it can enter an infinite loop writing CONTINUATION frames. Because HTTP/2 SETTINGS frames are exchanged as part of normal connection negotiation, exploitation requires no authentication or user interaction. The impact is availability loss: affected Go clients, proxies, services, or libraries using the vulnerable HTTP/2 transport may consume CPU, memory, network bandwidth, goroutines, or file descriptors until the process becomes degraded or unavailable.
Why it matters to the business
An attacker that can make an affected Go-based component establish or process HTTP/2 connections with attacker-controlled peers may be able to crash, hang, or severely degrade that component. This can interrupt APIs, service-to-service calls, outbound integrations, reverse proxies, gateways, or backend workers that rely on Go HTTP/2. The CVSS score is high for availability impact, but EPSS is currently low and no known exploited-in-the-wild status is reported, so remediation should be prioritized for internet-facing, high-throughput, or mission-critical Go services first.
How an attack unfolds
An attacker positions a malicious HTTP/2 peer, commonly by operating a server that an affected Go client, proxy, crawler, webhook processor, integration service, or backend component connects to. During HTTP/2 negotiation, the malicious peer sends a SETTINGS frame containing SETTINGS_MAX_FRAME_SIZE with an invalid value of 0. Instead of rejecting the setting cleanly, the vulnerable Go HTTP/2 transport can enter an infinite loop writing CONTINUATION frames. The resulting loop can drive sustained CPU usage, excessive outbound traffic, goroutine buildup, memory pressure, and connection exhaustion. Repeating the interaction across many connections can make the affected process unresponsive or unavailable.
How to fix it
Upgrade Go and any vendored golang.org/x/net/http2 dependency to a vendor-fixed release when available. Because no exact fixed versions were provided in the input, track the official Go security advisory and distribution/package manager advisories for the patched Go toolchain and x/net/http2 module versions. Rebuild and redeploy all statically linked Go binaries after upgrading, because Go applications typically embed library code at build time. If immediate patching is not possible, reduce exposure by disabling HTTP/2 where operationally feasible, preventing untrusted destinations from being contacted over HTTP/2, enforcing egress allow-lists for components that initiate outbound HTTP/2 connections, applying connection and request timeouts, limiting concurrent connections, and using reverse proxies or gateways that validate and reject invalid HTTP/2 SETTINGS frames before vulnerable Go components process them.
How to confirm the fix worked
Confirm remediation by inventorying Go runtimes, Go module dependencies, and statically compiled binaries that use net/http or golang.org/x/net/http2. Verify builds use a patched Go toolchain and patched http2 module once vendor-fixed versions are available. Use `go version -m <binary>` where applicable to inspect embedded Go version and module metadata. Review `go.mod` and `go.sum` for golang.org/x/net versions and rebuild binaries after dependency updates. In test environments, validate that an HTTP/2 peer sending SETTINGS_MAX_FRAME_SIZE=0 is rejected or the connection is closed without sustained CONTINUATION-frame emission, CPU spikes, goroutine growth, or process instability. Also confirm compensating controls such as HTTP/2 disablement, egress allow-listing, and connection limits are active where patches cannot yet be deployed.
Typical attack path
- Identify an affected Go-based application, proxy, service, or library path that uses HTTP/2 transport.
- Gain the ability to act as, or redirect traffic to, an attacker-controlled HTTP/2 peer.
- Complete enough of the HTTP/2 connection setup for SETTINGS processing to occur.
- Send an HTTP/2 SETTINGS frame with SETTINGS_MAX_FRAME_SIZE set to 0.
- Trigger the vulnerable transport into repeatedly writing CONTINUATION frames.
- Maintain or repeat connections until the target process experiences resource exhaustion or availability failure.
How to detect it
To determine whether exploitation already occurred, review network telemetry, HTTP/2-aware proxy logs, packet captures, load balancer logs, egress gateway logs, and host runtime metrics for evidence of invalid HTTP/2 SETTINGS frames where SETTINGS_MAX_FRAME_SIZE equals 0 followed by excessive CONTINUATION frames from the affected Go process. On hosts and containers, look for sudden sustained CPU usage, goroutine count growth, memory pressure, file descriptor exhaustion, high outbound traffic, repeated connection resets, or health-check failures correlated with HTTP/2 sessions to a small set of remote peers. Application logs may not record the malformed frame, so prioritize packet capture/Zeek/Suricata/Envoy/nghttp2 debug logs where available. For Go services, examine runtime profiles, pprof data, container restart events, OOM events, and orchestration logs around incidents of degraded availability. No named threat actors or known exploited-in-the-wild campaigns are reported in the provided data, so detection should focus on protocol anomalies and resource-exhaustion behavior rather than actor-specific infrastructure.
- SETTINGS_MAX_FRAME_SIZE=0
- SETTINGS_MAX_FRAME_SIZE: 0
- setting=SETTINGS_MAX_FRAME_SIZE value=0
- HTTP/2 SETTINGS frame with SETTINGS_MAX_FRAME_SIZE 0
- HTTP2 SETTINGS_MAX_FRAME_SIZE 0
- http2.settings.max_frame_size == 0
- http2.settings.max_frame_size: 0
- HTTP/2 setting identifier 0x5 value 0x00000000
- SETTINGS frame identifier=0x5 value=0
- frame_type=CONTINUATION
- HTTP/2 CONTINUATION frame flood
- excessive CONTINUATION frames
- CONTINUATION frames sent in a loop
What your security team should do
- Prioritize patching or mitigation for internet-facing Go services, proxies, gateways, crawlers, webhook processors, and any Go components that connect to untrusted HTTP/2 peers.
- Create an inventory of Go binaries and services using net/http HTTP/2 or golang.org/x/net/http2, including statically linked applications that will require rebuilds.
- Monitor Go security advisories and package distribution advisories for the exact fixed versions, then rebuild and redeploy affected binaries promptly.
- Temporarily disable HTTP/2 or restrict outbound HTTP/2 connections to trusted destinations where patching is delayed.
- Add detection for invalid HTTP/2 SETTINGS frames with SETTINGS_MAX_FRAME_SIZE set to 0 and abnormal bursts of outbound CONTINUATION frames.
- Tune runtime and infrastructure safeguards: connection timeouts, max concurrent streams/connections, process resource limits, autoscaling alerts, and health checks for rapid recovery.
- Investigate recent unexplained CPU spikes, goroutine growth, connection churn, or outbound HTTP/2 frame floods from Go services since publication.
The record
When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| openSUSE:Leap 16.0 | amazon-ecs-init | 0 | 1.103.2-160000.1.1 |
| openSUSE:Leap 16.0 | containerd | 0 | 1.7.33-160000.1.1 |
| openSUSE:Leap 16.0 | distribution | 0 | 3.1.1-160000.1.1 |
| openSUSE:Leap 16.0 | dnscrypt-proxy | 0 | 2.1.16-bp160.1.1 |
| openSUSE:Leap 16.0 | docker | 0 | 29.4.0_ce-160000.7.1 |
| openSUSE:Leap 16.0 | docker-stable | 0 | 24.0.9_ce-160000.6.1 |
| openSUSE:Leap 16.0 | google-cloud-sap-agent | 0 | 3.15-160000.1.1 |
| openSUSE:Leap 16.0 | google-guest-agent | 0 | 20260430.00-160000.1.1 |
| openSUSE:Leap 16.0 | google-osconfig-agent | 0 | 20260615.01-160000.1.1 |
| openSUSE:Leap 16.0 | ignition | 0 | 2.21.0-160000.4.1 |
| openSUSE:Leap 16.0 | mcphost | 0 | 0.34.0-160000.2.1 |
| openSUSE:Leap 16.0 | trivy | 0 | 0.71.0-160000.1.1 |
| openSUSE:Leap 16.0 | warewulf4 | 0 | 4.7.0-bp160.1.1 |
| openSUSE:Tumbleweed | amazon-ecs-init | 0 | 1.103.0-2.1 |
| openSUSE:Tumbleweed | apptainer | 0 | 1.4.5-5.1 |
| openSUSE:Tumbleweed | azure-storage-azcopy | 0 | 10.32.2-3.1 |
| openSUSE:Tumbleweed | cloudflared | 0 | 2026.5.2-1.1 |
| openSUSE:Tumbleweed | containerd | 0 | 1.7.33-1.1 |
| openSUSE:Tumbleweed | distribution | 0 | 3.1.1-3.1 |
| openSUSE:Tumbleweed | docker | 0 | 29.4.0_ce-40.1 |
| openSUSE:Tumbleweed | docker-stable | 0 | 24.0.9_ce-18.1 |
| openSUSE:Tumbleweed | go1.25 | 0 | 1.25.10-1.1 |
| openSUSE:Tumbleweed | go1.26 | 0 | 1.26.3-1.1 |
| openSUSE:Tumbleweed | google-guest-agent | 0 | 20260529.00-1.1 |
| openSUSE:Tumbleweed | google-osconfig-agent | 0 | 20260611.00-1.1 |
| openSUSE:Tumbleweed | hauler | 0 | 1.4.3-2.1 |
| openSUSE:Tumbleweed | helm | 0 | 4.2.0-2.1 |
| openSUSE:Tumbleweed | helm3 | 0 | 3.21.0-1.1 |
| openSUSE:Tumbleweed | ignition | 0 | 2.26.0-4.1 |
| openSUSE:Tumbleweed | mcphost | 0 | 0.34.0-5.1 |
| openSUSE:Tumbleweed | rclone | 0 | 1.74.1-1.1 |
| openSUSE:Tumbleweed | regclient | 0 | 0.11.4-1.1 |
| openSUSE:Tumbleweed | restic | 0 | 0.18.1-3.1 |
| openSUSE:Tumbleweed | rqlite | 0 | 10.1.0-1.1 |
| openSUSE:Tumbleweed | trivy | 0 | 0.70.0-2.1 |
| openSUSE:Tumbleweed | velociraptor | 0 | 0.7.0.4.git185.a5708584-2.1 |
| openSUSE:Tumbleweed | warewulf4 | 0 | 4.7.0-1.1 |
| openSUSE:Tumbleweed | yq | 0 | 4.53.2-1.1 |
Related vulnerabilities
- CVE-2026-39821 The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that… Also affects amazon-ecs-init
- CVE-2026-47262 containerd is an open-source container runtime. Also affects containerd
- CVE-2026-53488 containerd is an open-source container runtime. Also affects containerd
- CVE-2026-46680 containerd user ID handling bypass allows runAsNonRoot evasion Also affects containerd
- CVE-2026-35469 spdystream is a Go library for multiplexing streams over SPDY connections. Also affects containerd
- CVE-2026-46597 An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM… Also affects distribution
- CVE-2026-46598 For certain crafted inputs, a 'ed25519.PrivateKey' was created by casting malformed wire… Also affects distribution
- CVE-2026-42508 Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for… Also affects distribution