Skip to main content
Vulnerability Database/CVE-2026-77403

CVE-2026-77403: RabbitMQ amqp091-go DOS Vulnerability

CVE-2026-77403 is a denial of service flaw in RabbitMQ amqp091-go that allows malicious brokers to advertise small FrameMax values, causing excessive fragmentation and CPU consumption. This post explains its impact, affected versions, and mitigation steps.

Published:

CVE-2026-77403 Overview

CVE-2026-77403 is a denial-of-service vulnerability in the RabbitMQ amqp091-go client library, a Go implementation of the AMQP 0.9.1 protocol. The Connection.openTune function in connection.go accepts a server-advertised FrameMax value below the AMQP protocol minimum of 4096 bytes. A malicious or compromised AMQP broker can advertise an extremely small FrameMax, causing the client to fragment later publications into an excessive number of frames and write operations. The resulting CPU consumption stalls the client and can affect the host system. The issue is fixed in version 1.13.0 and is tracked as [CWE-770] Allocation of Resources Without Limits or Throttling.

Critical Impact

A malicious AMQP broker can force connected Go clients into CPU exhaustion by advertising an undersized FrameMax during connection negotiation.

Affected Products

  • RabbitMQ amqp091-go client library versions prior to 1.13.0
  • Go applications embedding amqp091-go for AMQP 0.9.1 messaging
  • Services connecting to untrusted or potentially compromised AMQP brokers

Discovery Timeline

  • 2026-09-16 - CVE-2026-77403 published to NVD
  • 2026-09-16 - Last updated in NVD database

Technical Details for CVE-2026-77403

Vulnerability Analysis

The AMQP 0.9.1 specification defines a frameMinSize of 4096 bytes as the protocol floor for the maximum frame size negotiated between client and server. During connection setup, the client and broker exchange tune frames to agree on FrameMax, heartbeat interval, and channel maximum. The amqp091-go client trusted whatever value the broker advertised without enforcing the specification minimum. When a broker returns a very small FrameMax value, the client fragments outbound payloads into thousands of small frames. Each frame triggers a separate serialization step and socket write, driving CPU utilization and I/O load on the client host. Applications that publish frequently or send larger messages amplify the impact.

Root Cause

The root cause is missing input validation in the negotiation loop of Connection.openTune. The prior implementation used a simple pick() helper that selected between the configured value and the server value without applying the protocol floor. This is a classic uncontrolled resource consumption bug [CWE-770] rooted in trusting server-controlled input.

Attack Vector

Exploitation requires the client to connect to an attacker-controlled or compromised AMQP broker. No authentication is required from the client side, and no user interaction is needed. Once the malicious tune frame is accepted, every subsequent publish operation on the connection contributes to resource exhaustion.

go
 	c.m.Unlock()
 
-	// Frame size includes headers and end byte (len(payload)+8), even if
-	// this is less than FrameMinSize, use what the server sends because the
-	// alternative is to stop the handshake here.
-	c.Config.FrameSize = pick(config.FrameSize, int(tune.FrameMax))
+	// Frame size includes headers and end byte (len(payload)+8). Enforce the spec
+	// minimum floor of frameMinSize (4096 bytes) to prevent malicious servers
+	// from forcing extreme fragmentation and CPU overhead.
+	c.Config.FrameSize = negotiateFrameSize(config.FrameSize, int(tune.FrameMax))
 
 	// Save this off for resetDeadline()
 	c.Config.Heartbeat = time.Second * time.Duration(pick(

Source: GitHub commit 2e0a919. The patch replaces the unchecked pick() call with negotiateFrameSize(), which enforces the 4096-byte floor.

Detection Methods for CVE-2026-77403

Indicators of Compromise

  • Sustained high CPU usage in Go processes that use amqp091-go shortly after establishing an AMQP connection.
  • Abnormally high outbound frame counts or socket write rates from AMQP client hosts to broker endpoints.
  • AMQP tune frames from brokers advertising FrameMax values below 4096 bytes captured on the wire.

Detection Strategies

  • Perform software composition analysis on Go builds to identify modules importing github.com/rabbitmq/amqp091-go at versions below 1.13.0.
  • Inspect AMQP handshake traffic with a protocol analyzer to flag tune-ok negotiations that settle on non-standard frame sizes.
  • Correlate application CPU spikes with recent AMQP connection events in host telemetry.

Monitoring Recommendations

  • Alert on process-level CPU saturation for services with active AMQP client sessions.
  • Baseline broker endpoints your clients connect to and alert on connections to unexpected AMQP servers.
  • Track dependency drift in CI pipelines so out-of-date amqp091-go versions surface before deployment.

How to Mitigate CVE-2026-77403

Immediate Actions Required

  • Upgrade all Go services that import github.com/rabbitmq/amqp091-go to version 1.13.0 or later.
  • Audit AMQP broker endpoints referenced in configuration and restrict clients to trusted, authenticated brokers.
  • Add network egress controls so AMQP clients can only reach approved broker addresses and ports.

Patch Information

The fix is included in amqp091-go v1.13.0 and merged via pull request #353. Additional context is available in the GitHub Security Advisory GHSA-xwwf-m8fg-p9q2. The patch introduces negotiateFrameSize() to enforce the AMQP frameMinSize value of 4096 bytes during connection tuning.

Workarounds

  • Set the FrameSize field explicitly in the client Config struct so a broker-supplied value below 4096 is less likely to dominate negotiation.
  • Terminate AMQP connections to brokers that negotiate frame sizes outside expected bounds and log the anomaly.
  • Isolate AMQP client workloads with per-process CPU limits so a single misbehaving connection cannot exhaust host resources.
bash
# Update the dependency to the patched release
go get github.com/rabbitmq/amqp091-go@v1.13.0
go mod tidy

# Verify the resolved version
go list -m github.com/rabbitmq/amqp091-go

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.