Cloudanix VulnDB

CVE-2026-33814

High · 7.5

CVSS

7.5

EPSS

0.8%

Published

May 7, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

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

  1. Identify an affected Go-based application, proxy, service, or library path that uses HTTP/2 transport.
  2. Gain the ability to act as, or redirect traffic to, an attacker-controlled HTTP/2 peer.
  3. Complete enough of the HTTP/2 connection setup for SETTINGS processing to occur.
  4. Send an HTTP/2 SETTINGS frame with SETTINGS_MAX_FRAME_SIZE set to 0.
  5. Trigger the vulnerable transport into repeatedly writing CONTINUATION frames.
  6. 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