
Loading

Loading
We use strictly necessary cookies to run this site, and analytics cookies to understand how it's used. See our Privacy Policy for details.
A GitHub-reviewed security advisory, not necessarily under active exploitation the way our CISA KEV advisories are, but a real, disclosed vulnerability in an open-source dependency.
Affected packages
Vulnerable: < 5.34.0
Patched in 5.34.0
Details
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.
A malicious AMQP server (or MITM) sends Connection.Tune with frameMax=0:
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 enforcementframeSize = 0x1FFFFFFF (~500MB)Frame.readFrom() (line 135) executes new byte[frameSize] — OOM crashThe 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.
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.
requestedFrameMax (client) and legitimate servers' frameMax in Tune may be 0Integer.MAX_VALUE bytes)maxInboundMessageBodySize (introduced to cap allocations at 64MB) is entirely defeated at the frame levelFrame.readFrom(), not a value-layer allocation in ValueReader.readBytes()AMQConnection.java:435-436 — Math.min with 0-means-unlimitedUtils.java:77-79 — framePayloadLimit(0) returns Integer.MAX_VALUEFrame.java:135 — new byte[frameSize] allocation siteConnectionFactory.java:82 — DEFAULT_FRAME_MAX = 0int 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".
EPSS, exploit probability
Low0.55%
estimated chance of real-world exploitation in the next 30 days, higher than 46.2% of every CVE FIRST.org scores
Refreshed 11/1/2026, via FIRST.org's EPSS model, not CVSS, this measures likelihood of exploitation, not how severe it would be.
Talk to us about this
Find out whether this dependency (or others like it) is actually reachable in your codebase.
Get help patching, or building dependency-scanning into your pipeline going forward.
A secure code review or supply chain review finds this before an advisory does.