CVE-2026-77411: RabbitMQ amqp091-go: Protocol Desynchronization and Frame Injection via Integer Overflow in readLongstr
Summary
A critical stream desynchronization vulnerability has been identified in the AMQP wire-protocol parser. When parsing a long string (readLongstr) within a table field, providing a length that exceeds the maximum signed 32-bit integer (2^31 - 1, or roughly 2.1 GiB) triggers an improper error-handling condition. The parser abruptly aborts the read and returns a success status ("",nil) without consuming the specified bytes from the underlying network buffer. This causes all subsequent read operations to become misaligned. The parser interprets arbitrary offsets within the remaining payload bytes as valid AMQP frame headers, leading to potential Remote Code Execution (RCE), data injection, or complete connection hijacking.
Vulnerability Details
The vulnerability exists within the bounds-checking logic of the readLongstr function: go // read.go:113-114 — silent no-op return, bytes left in stream if length > (^uint32(0) >> 1) { return // returns "", nil, does NOT consume length bytes } When length evaluates to a value greater than 0x7FFFFFFF:
1. The function executes a silent return statement. 2. Because Go utilizes named or zero-value initialization for unassigned return registers, this yields "", nil (indicating a successful read of an empty string). 3. The Critical Failure: The reader's cursor is not advanced by length bytes. The malformed payload remains sitting in the TCP/buffer stream.
Impact
As readTable continues iterating over the stream under the assumption that the string was successfully parsed, the byte alignment is entirely broken.
- Parser Desynchronization: Future AMQP frame headers are read from arbitrary offsets inside the attacker-controlled message payload. - Payload Reinterpretation: A malicious actor can carefully craft the trailing bytes of the initial payload to perfectly mimic valid AMQP frames (e.g., connection.close, channel.open, or message publishing frames), forcing the client/server to execute unintended actions.
Other sources
RabbitMQ amqp091-go is a Go AMQP 0.9.1 client. Prior to 1.13.0, readLongstr in read.go returns an empty string and a nil error when a declared AMQP longstr length exceeds 0x7FFFFFFF instead of returning ErrSyntax. The function leaves the declared field bytes unread, while readTable treats the operation as successful and continues parsing from the wrong offset. A malicious or compromised broker can provide an oversized longstr in a table field and desynchronize subsequent AMQP parsing, causing attacker-controlled trailing bytes to be interpreted as later fields or frames and disrupting connection integrity and availability. This issue is fixed in version 1.13.0.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/rabbitmq/amqp091-goto a version that resolves this vulnerability.Fixed in 1.13.0 - Upgrade
Upgrade
RabbitMQ amqp091-goto a version that resolves this vulnerability.Fixed in 1.13.0 - Compensating control
Assume a potentially compromised broker could desynchronize the AMQP parser; mitigate impact by isolating AMQP clients (e.g., network segmentation / restrict broker access) until all clients are upgraded to RabbitMQ amqp091-go v1.13.0.
Event History
Frequently Asked Questions
Which deployments are exposed to this issue?
Applications using the RabbitMQ amqp091-go client before version 1.13.0 are affected. Exploitation requires the client to process AMQP data from a malicious or compromised broker.
What does an attacker need to send to trigger the parsing failure?
The broker must supply an AMQP table field containing a longstr whose declared length exceeds 0x7FFFFFFF. The client then leaves the field bytes unread and parses subsequent attacker-controlled bytes at the wrong offset.
What is the practical impact of successful exploitation?
Subsequent AMQP data can be desynchronized, allowing trailing bytes to be interpreted as later fields or frames. This can disrupt connection integrity and availability.
What should be done to remediate the issue?
Upgrade amqp091-go to version 1.13.0, which fixes the handling of oversized longstr lengths.