RabbitMQ Java client has frame-level OOM: Math.min(maxInboundMessageBodySize, 0) defeats frame size enforcement
Vulnerability
In AMQConnection.java (line 435-436), after Connection.Tune negotiation, the frame-max limit is set via:
_frameHandler.setFrameMax(
Math.min(this.maxInboundMessageBodySize, frameMax));
When frameMax = 0 (meaning "unlimited" per AMQP spec), Math.min(67108864, 0) = 0. This value is then passed to Utils.framePayloadLimit(0) which returns Integer.MAX_VALUE (line 77-79 of Utils.java):
static int framePayloadLimit(int frameMax) {
if (frameMax <= 0) {
return Integer.MAX_VALUE;
}
// ...
}
This completely defeats the maxInboundMessageBodySize protection (default 64MB) at the frame level.
Attack Scenario
A malicious AMQP server (or MITM) sends Connection.Tune with frameMax=0:
- Client defaults:
requestedFrameMax = 0(ConnectionFactory.DEFAULT_FRAME_MAX, line 82) negotiatedMaxValue(0, 0)=Math.max(0, 0)= 0 (line 673-676)Math.min(maxInboundMessageBodySize, 0)= 0 — 64MB cap defeatedframePayloadLimit(0)=Integer.MAX_VALUE— no frame size enforcement- Attacker sends a single frame with
frameSize = 0x1FFFFFFF(~500MB) Frame.readFrom()(line 135) executesnew byte[frameSize]— OOM crash
The frame does not need to be a body frame — method frames, header frames, or heartbeat frames with a crafted size field all trigger the allocation before any content-level check fires.
Root Cause
The AMQP spec uses frameMax=0 to mean "unlimited", but Math.min treats it as the integer value zero. The intent of line 435-436 was to take the smaller of the two limits, but when one limit uses 0-means-unlimited semantics, Math.min always selects the zero, disabling the other limit.
Impact
- Default configuration is vulnerable: Both
requestedFrameMax(client) and legitimate servers'frameMaxin Tune may be 0 - Single-frame OOM: One malicious frame triggers up to ~2GB allocation (
Integer.MAX_VALUEbytes) - Bypasses existing protection:
maxInboundMessageBodySize(introduced to cap allocations at 64MB) is entirely defeated at the frame level - Different from ValueReader OOM: This is a frame-layer allocation in
Frame.readFrom(), not a value-layer allocation inValueReader.readBytes()
Affected Code
AMQConnection.java:435-436—Math.minwith 0-means-unlimitedUtils.java:77-79—framePayloadLimit(0)returnsInteger.MAX_VALUEFrame.java:135—new byte[frameSize]allocation siteConnectionFactory.java:82—DEFAULT_FRAME_MAX = 0
Suggested Fix
int effectiveFrameMax = (frameMax == 0)
? this.maxInboundMessageBodySize
: Math.min(this.maxInboundMessageBodySize, frameMax);
_frameHandler.setFrameMax(effectiveFrameMax);
This treats frameMax=0 as "use maxInboundMessageBodySize as the cap" instead of "zero".
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Java / Kotlin (Maven) | com.rabbitmq:amqp-client | < 5.34.0 | 5.34.0 |
Odnośniki
- https://github.com/rabbitmq/rabbitmq-java-client/security/advisories/GHSA-jh4v-gfqj-7rhx
- https://nvd.nist.gov/vuln/detail/CVE-2026-75516
- https://github.com/rabbitmq/rabbitmq-java-client/pull/2015
- https://github.com/rabbitmq/rabbitmq-java-client/pull/2016
- https://github.com/rabbitmq/rabbitmq-java-client/commit/6d7c2bfe89796ca34d3531098fb59dd657fea39e
- https://github.com/rabbitmq/rabbitmq-java-client/commit/e7f10bf99aee103dd9f64b3e52a725fc9f9d3763
- https://github.com/rabbitmq/rabbitmq-java-client
- https://github.com/rabbitmq/rabbitmq-java-client/releases/tag/v5.34.0
- Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N- Słabość (CWE)
CWE-770- Platforma
- Java / Kotlin (Maven)
- Paczka
com.rabbitmq:amqp-client- Ujawniono
- 17.09.2026
- Aktualizacja
- 11.10.2026 13:20
Źródła i licencje
OSV / GitHub Advisory Database - GHSA-jh4v-gfqj-7rhx - CC BY 4.0
Historia podatności: com.rabbitmq:amqp-client
Wszystkie opisane podatności tej paczki (Java / Kotlin (Maven)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 12
- Pierwsza → ostatnia
- 10.2018 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Wysoka 4
- Średnia 7
- Niska 1
Ujawnienia w latach
- 2018: 1
- 2019: 0
- 2020: 0
- 2021: 0
- 2022: 0
- 2023: 1
- 2024: 0
- 2025: 0
- 2026: 10
-
RabbitMQ Java client has frame-level OOM: Math.min(maxInboundMessageBodySize, 0) defeats frame size enforcement ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.