Repository navigation
CVE-2026-106449 CVE-2026-106450 CVE-2026-106451 CVE-2026-106452 CVE-2026-106453 at.yawk.lz4:lz4-java: Decompression DoS and native-library hijack via shared tmpdir (1.11.1 -> 1.11.4) - #1166
Open
dependabot[bot] wants to merge 1 commit into
Open
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps [at.yawk.lz4:lz4-java](https://github.com/yawkat/lz4-java) from 1.11.1 to 1.11.4. - [Release notes](https://github.com/yawkat/lz4-java/releases) - [Changelog](https://github.com/yawkat/lz4-java/blob/main/CHANGES.md) - [Commits](yawkat/lz4-java@v1.11.1...v1.11.4) --- updated-dependencies: - dependency-name: at.yawk.lz4:lz4-java dependency-version: 1.11.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps
at.yawk.lz4:lz4-javafrom 1.11.1 to 1.11.4 inopenam-cassandra/pom.xml(dependencyManagement), clearing Dependabot alerts #354–#358: five advisories published against the 1.11.x line on 2026-10-07, two fixed in 1.11.2 and three in 1.11.4. This follows #1085, which took the same dependency from 1.10.1 to 1.11.1 for CVE-2026-59949.Advisories
CVE-2026-106453 / GHSA-6cx8-rjf8-pr8g (fixed in 1.11.2) — Memory allocation with excessive size value (CWE-789) in
LZ4DecompressorWithLength.decompress(byte[], int): it allocates whatever the 4-byte length header declares before reading any compressed data, so a 5-byte input asking for0x40000000commits 1 GiB and can exhaust the heap;LZ4SafeDecompressor.decompress(byte[], int, int, int)has the same shape. 1.11.2 validates length-prefixed sizes against a 64 MiB default limit and a decompression-ratio check; 1.11.3 makes the default configurable through thenet.jpountz.lz4.LZ4DecompressorWithLength.maxDecompressedLengthsystem property.CVE-2026-106452 / GHSA-4v53-57pg-c464 (fixed in 1.11.2) — Memory allocation with excessive size value (CWE-789) in
LZ4BlockInputStream.refill(): the compressed-input buffer grows to the attacker-controlledcompressedLenof the legacyLZ4Blockheader before any payload is read, so a header-only input triggers a near-2 GiB allocation. 1.11.2 rejects LZ4-method blocks whose compressed length exceeds the uncompressed one (a canonical writer emits those as RAW); the newacceptOversizedBlocksflag restores the old behaviour together with the DoS vector.CVE-2026-106450 / GHSA-gm45-99xc-r7wv (fixed in 1.11.4) — Allocation of resources without limits (CWE-770) in
LZ4FrameInputStream.readHeader(): every frame header allocates two fresh buffers of the frame's maximum block size (up to 4 MiB each), and concatenated frames are read by default, so an 11-byte empty frame forces ~8 MiB of zeroed allocation — about 8 s of CPU for 110 KB of input. 1.11.4 allocates block buffers only when a block needs them and reuses them across frames.readSingleFrame = truewas never affected.CVE-2026-106449 / GHSA-343h-94h5-c4wr (fixed in 1.11.4) — Uncontrolled recursion (CWE-674) in
LZ4BlockInputStream.refill()withstopOnEmptyBlock = false: each 21-byte empty block recurses once, so 10,000–100,000 of them throwStackOverflowErrorout ofread()/skip(), whichIOExceptionhandlers do not catch. 1.11.4 skips empty blocks in a loop. The defaultstopOnEmptyBlock = truewas never affected.CVE-2026-106451 / GHSA-mcr4-qmvw-px4g (fixed in 1.11.4) — Insecure temporary file / TOCTOU race (CWE-377, CWE-367) in
net.jpountz.util.Native.load(): when no systemliblz4-javais found, the bundled JNI library is extracted tojava.io.tmpdirunder a predictable name (the random.lckname minus its suffix) that is opened without exclusive creation. A local user who shares that directory and wins the race can plant the file and have their code loaded into the victim JVM (withfs.protected_regular >= 1only a fallback to the pure-Java implementation, i.e. no code execution). 1.11.4 extracts straight into a file fromFile.createTempFileand drops the.lckfiles. Introduced upstream in lz4-java 1.7.0.AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L)AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L)AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L)AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L)Four are availability-only; GHSA-mcr4-qmvw-px4g is a local code-execution race that needs a shared temporary directory, a permissive host and a won race.
Impact on OpenAM
lz4-javaships in the WAR (WEB-INF/lib/lz4-java-1.11.1.jar, viaopenam-cassandra-datastore, whichopenam-server-onlydepends on) next tojava-driver-core4.19.2. No OpenAM source importsnet.jpountz; the only consumer is the Cassandra driver'sLz4Compressor, which callsLZ4Factory.fastestInstance()and thefastCompressor()/fastDecompressor()ByteBufferoverloads with caller-supplied lengths — notLZ4BlockInputStream,LZ4FrameInputStreamorLZ4DecompressorWithLength. So the four DoS advisories are not reachable from OpenAM.The driver creates
Lz4Compressoronly whenadvanced.protocol.compression = lz4is set. OpenAM'sopenam-cassandra-datastore/src/main/resources/application.confdoes not set it, and the driver'sreference.confleaves it absent (frames uncompressed), so by default the native library is never loaded and CVE-2026-106451 is not reachable either. A deployment that turns LZ4 protocol compression on through its own driver configuration loads the JNI library throughNative.load(); on 1.11.1 that is exposed to CVE-2026-106451 whenjava.io.tmpdiris shared with other local users (e.g. the default world-writable/tmpwithoutPrivateTmp). The bump closes that.openam-cassandra-embedded(Cassandra server,cassandra-all) also takes itslz4-javaversion from thisdependencyManagemententry, but is atest-scoped dependency of the datastore and CTS modules and is not in the WAR.Change
openam-cassandra/pom.xml,dependencyManagement:at.yawk.lz4:lz4-java1.11.1 → 1.11.4. It governsopenam-cassandra-datastoreandopenam-cassandra-embedded. No code change.Behaviour changes in the new range, none of which touches the driver's code path:
LZ4DecompressorWithLengthrejects declared sizes above 64 MiB (configurable since 1.11.3), andLZ4BlockInputStreamrejects oversized LZ4-method blocks unlessacceptOversizedBlocksis set.liblz4-java-*temporary files (including old.lckfiles) older than one hour are removed at startup.References