CVE-2026-75516 — amqp-client
Fix: rabbitmq/rabbitmq-java-client@6d7c2bfCVE-2026-75516 is a CWE-770 vulnerability in com.rabbitmq:amqp-client. A fix is available for com.rabbitmq:amqp-client — see the affected versions and patch details below.
RabbitMQ Java client: Frame-level OOM: Math.min(maxInboundMessageBodySize, 0) defeats frame size enforcement
Exploitation Status
No confirmed exploitation observed yet
- CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-75516.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
com.rabbitmq:amqp-clientReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Maven packages — download data is not available via public APIs for these ecosystems.
Description
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".
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| ☕Maven | com.rabbitmq:amqp-client | all versions | 5.34.0com.rabbitmq:amqp-client:5.34.0 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for com.rabbitmq:amqp-client, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update com.rabbitmq:amqp-client to 5.34.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-75516 is resolved across your whole dependency graph.
Workarounds
Cap what an attacker can consume: apply request size, rate and timeout limits in front of the affected component, and run it with memory and CPU limits so exhaustion degrades one worker rather than the whole service.
Fixing This On Your OS
If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.
This vulnerability is rated as Important because an attacker capable of intercepting network traffic or operating a rogue message broker can remotely crash client applications through unbounded memory consumption, causing a complete denial of service. In typical Red Hat deployments, applications establish connections…
Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.Source: Red Hat security advisory for CVE-2026-75516 (CC BY 4.0)
Frequently Asked Questions
Is CVE-2026-75516 in your dependencies?
Find it across Maven, including transitive dependencies.