Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted LZ4 stream to service
-
ExploitSet near-2GiB compressedLen in legacy block header
-
Executionrefill() allocates oversized buffer before reading payload
-
ImpactExhaust JVM heap causing OutOfMemoryError / DoS
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory allocation limits
|
| Exploitation Conditions | The consuming application must use net.jpountz.lz4.LZ4BlockInputStream (or its Builder) to decompress LZ4 legacy-block data that an attacker can influence; against that default configuration no authentication or user interaction is required, since refill() validates only that compressedLen is nonnegative and allocates the buffer before reading payload. The concrete prerequisite is an attacker-supplied non-canonical legacy LZ4Block header whose compressedLen is set greater than or equal to originalLen (up to ~2 GiB) - canonical writers never emit such blocks, so the attacker must forge one. Limiting factors: the vulnerability is only reachable if the application exposes this reader to untrusted compressed input; version 1.11.2+ rejects oversized blocks by default and only reintroduces the risk if an operator explicitly calls withAcceptOversizedBlocks(true), and effective impact depends on the JVM's configured maximum heap relative to the ~2 GiB request. |
| Impact | This is a memory-allocation denial-of-service flaw (CWE-789), not a priority emergency. The provided CVSS:3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L = 5.3 MEDIUM) is internally consistent with the description: a remote, unauthenticated, low-complexity trigger with availability-only impact and no confidentiality or integrity loss. No EPSS score, no CISA KEV listing, and no standalone public exploit were provided, so exploitation is currently 'no public exploit identified at time of analysis' - though the fix commit (bb83dd1) ships a regression test that demonstrates the oversized-block code path. The signals are non-conflicting and all point to a moderate resource-exhaustion issue rather than code execution: the A:L rating reflects that a single crafted header forces one ~2 GiB heap allocation (transient failure) rather than guaranteed process death, but note that on JVMs with max heap below ~2 GiB the resulting OutOfMemoryError can realistically crash or destabilize the host application, which would push real-world impact toward A:H. Exploitability is entirely gated by whether the consuming application feeds attacker-controlled LZ4 legacy-block streams into LZ4BlockInputStream; the library default is vulnerable (the patch rejects non-canonical oversized blocks unless the new withAcceptOversizedBlocks(true) opt-in is set). Caveat: the input Tag 'Information Disclosure' directly contradicts the CVSS vector (C:N/I:N) - this is an availability/DoS issue, so that label should not drive triage. |
| Exploit ScenarioDerived | An attacker who can submit LZ4-compressed data to a service that decompresses it via net.jpountz.lz4.LZ4BlockInputStream crafts a header-only legacy LZ4Block whose compressedLen field is set near 2 GiB. Because refill() only checks that the value is nonnegative and allocates the compressed-input buffer before reading any payload, a tiny request forces a massive JVM heap allocation, risking OutOfMemoryError and service disruption. No weaponized public exploit is known, but the vendor's fix commit includes a regression test exercising this exact oversized-block path. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Heap exhaustion in the yawkat LZ4 Java library before 1.11.2 allows remote denial of service: net.jpountz.lz4.LZ4BlockInputStream.refill() checks that the compressedLen field of a legacy LZ4Block header is nonnegative but then allocates a compressed-input buffer of exactly that attacker-controlled size before any payload is read. Because each header is only a handful of bytes, a header-only stream can request a near-2 GiB allocation and crash the JVM with OutOfMemoryError, affecting any application that decompresses attacker-influenced LZ4 legacy-block data with the default reader configuration; no public exploit code or active exploitation was identified at time of analysis (CVSS 5.3, availability-only impact). The flaw is fixed in version 1.11.2, which rejects non-canonical oversized blocks by default.
RemediationAI
Vendor-released patch: upgrade to yawkat LZ4 Java 1.11.2 (https://github.com/yawkat/lz4-java/releases/tag/v1.11.2), which rejects legacy LZ4 blocks whose compressedLen is greater than or equal to originalLen by default; after upgrading, ensure no operator re-enables the vulnerable behavior via Builder.withAcceptOversizedBlocks(true), which is intended only for trusted, deliberately noncanonical input. If an immediate upgrade is not possible, the most effective compensating control is to stop feeding untrusted data to LZ4BlockInputStream at all - prefer LZ4FrameInputStream, which applies frame-level sizing constraints, or decode only blocks produced by trusted canonical writers; because the malicious header is only a few bytes, wrapping the stream in a byte-count limiter or capping input size does not mitigate the allocation and should not be relied on. Restricting the exposure of any endpoint, job, or queue that performs LZ4 legacy-block decompression to authenticated or internal callers reduces reachability at the cost of reduced functionality. As a containment measure, running the decoder in a JVM with a modest -Xmx and an OutOfMemoryError-tolerant supervisor limits the blast radius, at the trade-off that OOM conditions can still disrupt other work in the same JVM, so process isolation (separate JVM or container per decoding task) is preferable. Monitor the advisory at https://github.com/yawkat/lz4-java/security/advisories/GHSA-4v53-57pg-c464 and the fixing commit at https://github.com/yawkat/lz4-java/commit/bb83dd16163cdb71231af06b0a5651881148a634 for any backports. No public exploit code was identified at time of analysis, but the flaw is trivially reachable by forging a header, so patching should be prioritized on any internet-facing decoder.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in maven, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
LZ4 block-format streams carry a header per block with a compression method byte, a 4-byte compressed length (compressedLen) and a 4-byte original length (originalLen). Canonical writers emit a raw block (COMPRESSION_METHOD_RAW) whenever compression would not shrink the data, so for LZ4-compressed blocks compressedLen is always strictly less than originalLen; a block whose compressed length is greater than or equal to the original length is therefore non-canonical and can only come from a forged or malformed stream. In the vulnerable code path, refill() validated only that compressedLen was nonnegative and then allocated the input buffer of that size before reading payload, a classic CWE-789 (memory allocation with excessive size) pattern in which an attacker-controlled length field drives allocation prior to validation of the actual data. The upstream commit bb83dd16163cdb71231af06b0a5651881148a634 adds an acceptOversizedBlocks flag (default false) to LZ4BlockInputStream and its Builder, extending refill()'s validation to reject COMPRESSION_METHOD_LZ4 blocks where compressedLen >= originalLen, and exposes Builder.withAcceptOversizedBlocks(boolean) (since 1.11.2) documented as safe only for trusted, noncanonical input because it restores the large-allocation behavior. The patch ships as release v1.11.2 and is accompanied by new LZ4BlockStreamingTest coverage.
Know when Java gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Remote, low-complexity, unauthenticated parsing of a crafted stream with no UI; impact is availability-only via a single transient oversized heap allocation, hence A:L and C/I:N.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
yawkat LZ4 Java provides LZ4 compression for Java. Prior to 1.11.2, net.jpountz.lz4.LZ4BlockInputStream refill() validates that the compressedLen field in a legacy LZ4Block header is nonnegative but allocates a compressed-input buffer of that attacker-controlled size before reading payload data, allowing a header-only stream to request a near-2 GiB allocation and exhaust the JVM heap. Canonical writers emit raw blocks when compression is not smaller than the original block, but vulnerable readers accept non-canonical oversized compressed blocks. This issue is fixed in version 1.11.2.
Blast Radius
ecosystem impact- 1,245 maven packages depend on at.yawk.lz4:lz4-java (78 direct, 1,171 indirect)
- 193 maven packages depend on org.lz4:lz4-java (62 direct, 133 indirect)
Ecosystem-wide dependent count for version 1.11.2 and other introduced versions.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
EUVD-2026-93871
GHSA-4v53-57pg-c464
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB