Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker controls inbound LZ4 compressed stream
-
DeliveryCraft long run of empty LZ4 blocks
-
ExploitVictim decodes with stopOnEmptyBlock=false
-
ExecutionRecursive refill() exhausts thread stack
-
ImpactStackOverflowError crashes decoding thread (DoS)
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
|
| Exploitation Conditions | Exploitation requires the consuming application to use net.jpountz.lz4.LZ4BlockInputStream with stopOnEmptyBlock explicitly set to false - this is NOT the default (the default true is unaffected) and is the primary limiting factor. The attacker must also control, or be able to inject, the compressed LZ4 block stream fed to that input stream. Given those conditions, no authentication is needed (PR:N) and no user interaction is required, but the non-default configuration and the AC:H rating reflect that most deployments running defaults are not exposed. Impact is limited to crashing the single decoding thread via StackOverflowError (availability only); there is no confidentiality, integrity, or memory-corruption impact. |
| Impact | This is a genuinely low-priority issue despite being network-reachable. The supplied CVSS:3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L, score 3.7) aligns well with the description: unauthenticated and remote, but high complexity and limited to a partial availability impact with no confidentiality or integrity loss. The root cause is CWE-674 (uncontrolled recursion) leading to a StackOverflowError on the decoding thread - a denial-of-service of a single thread, not memory corruption (the description explicitly rules that out). Crucially, exploitation requires the non-default LZ4BlockInputStream configuration stopOnEmptyBlock=false; the default (true) is not affected, which is the main factor limiting real-world exposure and justifies AC:H. No EPSS score, KEV listing, or public exploit was provided in the input, so there is no public exploit identified at time of analysis and no evidence of active exploitation. Note a metadata conflict: the input Tags include 'Buffer Overflow', but the description explicitly states the issue does not cause memory corruption and CWE-674 is uncontrolled recursion - the 'Buffer Overflow' label is inaccurate. The upstream commit ships a regression test that constructs a malicious stream of 1,000,000 empty blocks, demonstrating feasibility, but this is a project unit test rather than a weaponized public exploit. |
| Exploit ScenarioDerived | An application decodes untrusted LZ4 block-stream data using LZ4BlockInputStream explicitly configured with stopOnEmptyBlock=false. An attacker supplying the compressed stream prepends a long run of well-formed empty LZ4 blocks; the stream handler recurses once per empty block via refill(), exhausting the thread's stack and throwing StackOverflowError, crashing the decoding thread. No public weaponized exploit is identified, though the vendor's fix commit includes a test that reproduces the condition. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Uncontrolled recursion in yawkat LZ4 Java's net.jpountz.lz4.LZ4BlockInputStream can crash the decoding thread: when the stream is explicitly configured with stopOnEmptyBlock set to false, each well-formed empty LZ4 block causes refill() to call itself recursively, so an attacker-supplied compressed stream containing a long run of empty blocks drives the stack to exhaustion and throws StackOverflowError. Only applications that both use LZ4BlockInputStream with the non-default stopOnEmptyBlock=false setting and feed it attacker-controlled or injectable compressed data are exposed; the default stopOnEmptyBlock=true is not affected, no authentication or user interaction is required under those conditions (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L), and impact is limited to availability of the decoding thread with no memory corruption, confidentiality, or integrity effect. There is no public exploit identified at time of analysis and the flaw is fixed in version 1.11.4.
RemediationAI
Vendor-released patch: upgrade to lz4-java 1.11.4, which replaces the recursive empty-block handling in LZ4BlockInputStream with an iterative loop (commit c8ebf97d504fb34434fda46fc761e8202570e0d8); confirm the resolved version in your dependency tree, since lz4-java is frequently pulled in transitively by Kafka, Cassandra, and other data-processing frameworks. If you cannot upgrade immediately, the most effective compensating control is to leave stopOnEmptyBlock at its default of true or explicitly remove any builder call that sets it to false - the code path is simply unreachable in that configuration, at the cost of changing how end-of-stream/empty-block termination is handled for that stream. Where the non-default setting must be retained, do not pass untrusted or attacker-influenceable byte streams into LZ4BlockInputStream: bound the size and number of blocks accepted (for example via a length-limited or byte-counting wrapper), reject or cap streams containing abnormally long runs of empty blocks, and run decompression in an isolated thread or worker whose StackOverflowError can be caught and discarded without taking down the surrounding service. Catch and contain StackOverflowError around decode operations as a last-resort backstop, understanding that it can leave JVM state unpredictable and is not a substitute for upgrading. Reference the vendor advisory at https://github.com/yawkat/lz4-java/security/advisories/GHSA-343h-94h5-c4wr for the authoritative fix details.
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
The affected component is the LZ4 block-format reader net.jpountz.lz4.LZ4BlockInputStream in the yawkat LZ4 Java library (formerly net.jpountz.lz4), a pure-Java implementation of the LZ4 compression algorithm. The LZ4 block stream format encodes data as a sequence of blocks, each preceded by a header containing magic bytes and a compression-method byte; a well-formed empty block is legal in that format and is used to signal stream termination, which is why the reader's stopOnEmptyBlock flag exists. Per the CWE-674 (uncontrolled recursion) root cause, the reader's private refill() method recursively called itself when it encountered an empty block while stopOnEmptyBlock was false, instead of iterating; consequently a stream containing roughly a million chained empty blocks, as demonstrated in the commit's test case (emptyBlocksFollowedBy(1_000_000, ...)), exhausts the decoding thread's call stack. The problem is triggered through both the read and skip paths, but it is a stack-exhaustion defect only - no memory corruption occurs because the recursion is bounded by stack depth and terminates in a StackOverflowError. The source fix in commit c8ebf97d504fb34434fda46fc761e8202570e0d8 converts the recursive call into a while loop over a new readBlock() helper that returns false for empty blocks, preserving behavior (including in the available() and skip() paths) while making the empty-block handling iterative.
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:H/PR:N/UI:N/S:U/C:N/I:N/A:L
Remote attacker-supplied stream (AV:N, PR:N, UI:N), but the required non-default stopOnEmptyBlock=false configuration makes it AC:H, with only a single-thread DoS (A:L) and no C/I impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
yawkat LZ4 Java provides LZ4 compression for Java. Prior to 1.11.4, net.jpountz.lz4.LZ4BlockInputStream configured with stopOnEmptyBlock set to false handles each well-formed empty LZ4Block by recursively calling refill(), allowing a long sequence of empty blocks in an attacker-controlled compressed stream to exhaust the decoding thread's stack and throw StackOverflowError. The default stopOnEmptyBlock setting is true and is not affected, and the issue does not cause memory corruption. This issue is fixed in version 1.11.4.
Blast Radius
ecosystem impact- 163 maven packages depend on at.yawk.lz4:lz4-java (18 direct, 145 indirect)
- 193 maven packages depend on org.lz4:lz4-java (62 direct, 133 indirect)
Ecosystem-wide dependent count for version 1.11.4 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
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-93862
GHSA-343h-94h5-c4wr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB