Skip to main content

snappy-java CVE-2026-108104

| EUVDEUVD-2026-95806 MEDIUM
Double Free (CWE-415)
2026-10-09 VulnCheck GHSA-2xrm-qggp-hr4m
6.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send crafted framed Snappy stream
  2. Delivery
    Declare oversized chunk length
  3. Exploit
    Trigger OutOfMemoryError on buffer reallocation
  4. Execution
    Double-release buffer into shared pool
  5. Impact
    Read or overwrite other streams' decompressed data

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Double free prevention
Exploitation Conditions

Exploitation requires that the target application decompress attacker-supplied Snappy *framed* data specifically through SnappyFramedInputStream, and that this stream draw from a buffer pool shared across multiple concurrently-active streams - the cross-stream exposure only manifests when a double-released pooled buffer is handed to another live stream. The concrete trigger is a frame whose declared chunk length is large enough that the replacement allocation fails with OutOfMemoryError along the path near SnappyFramedInputStream.java:243. Limiting factors: the leak is opportunistic, not deterministic (reflected by AT:P), there is no impact on single-stream or non-pooled usage, applications using the classic SnappyInputStream rather than the framed variant are not affected by this specific path, and only versions 1.1.7.4 through 1.1.10.9 are vulnerable.

Impact

This is a medium-severity (CVSS 4.0 base 6.3) memory-safety flaw in a widely-embedded Java library, best characterized as a real-but-conditional risk rather than an urgent emergency. The provided CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) indicates network-reachable, unauthenticated exploitation but with AT:P - meaning a specific attack requirement (the race/allocation-failure condition) must be met, which materially lowers reliability. Impact is limited and split: VC:L and VI:L (low confidentiality and integrity) with VA:N (no availability impact claimed in the vendor vector, even though the trigger itself is an OutOfMemoryError). No KEV listing, no EPSS score, and no public exploit were provided, so exploitation is currently theoretical: no public exploit identified at time of analysis. The strongest mitigating signals are the AT:P attack requirement and the need for a shared buffer pool serving multiple concurrent streams, which make the cross-stream data leak opportunistic rather than attacker-controlled. The strongest aggravating signal is the library's enormous transitive-dependency footprint across the Java data ecosystem. Net: patch on a normal cadence, prioritized above cosmetic issues but below any network-facing unauthenticated RCE. Note: no EPSS data was supplied, so exploitation probability cannot be quantified from the input.

Exploit ScenarioDerived

An attacker submits a specially crafted Snappy framed stream whose frame header declares an extremely large chunk length to a service that decompresses untrusted input via SnappyFramedInputStream from a shared buffer pool. The oversized declaration forces a replacement buffer allocation that fails with OutOfMemoryError, causing the same pooled buffer to be released twice; a second, concurrent stream then draws that same backing array and reads or clobbers the attacker's-or-victim's decompressed data. No public exploit code is known, and the AT:P attack requirement makes the cross-stream leak opportunistic rather than deterministic.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 09, 2026

Double-release of pooled decompression buffers in Xerial snappy-java 1.1.7.4 through 1.1.10.9 lets a crafted Snappy framed stream corrupt or expose data belonging to another, concurrently active stream. An attacker-supplied frame that declares an oversized chunk length forces the replacement buffer allocation to fail with OutOfMemoryError, after which the failed path still treats the already-released pooled buffer as live and returns it to the pool a second time, so the same backing array can be handed to a second stream. The flaw is remote and unauthenticated (CVSS:4.0 vector PR:N) but opportunistic rather than deterministic, requires the target to decompress untrusted framed input through SnappyFramedInputStream while drawing from a shared buffer pool, and carries no public exploit identified at time of analysis; overall risk is medium severity rather than urgent emergency.

RemediationAI

Vendor-released patch: upgrade snappy-java to 1.1.10.10 or later, which nulls the released buffer references before reallocation so close() cannot perform the second release (fix commit 139a53090a6662298924fd75d21f4769b4a219ea; release notes at https://github.com/xerial/snappy-java/releases/tag/v1.1.10.10; advisory at https://github.com/xerial/snappy-java/security/advisories/GHSA-c73m-r934-8qvg). Because the library is usually a transitive dependency, prioritize by locating the snappy-java version in your dependency tree (Maven/Gradle dependency resolution or SBOM) and pin it to 1.1.10.10 or newer rather than relying on a parent framework's upgrade cadence. Until patching is complete, the most effective compensating control is to stop feeding attacker-controlled data into SnappyFramedInputStream: where the wire format is under your control, use the non-framed SnappyInputStream path, which is not affected by this double-release, or terminate the framed format at a boundary where the decompressed payload is not mixed with other tenants' streams - the trade-off is loss of framed-format compatibility for external producers. If framed input must be accepted from untrusted sources, enforce a hard cap on the declared chunk length and on total input size before decompression so the oversized-allocation failure that triggers the double release cannot occur, accepting that legitimate large frames above the cap will be rejected. Additional defensive controls include disabling or bypassing shared buffer pooling for untrusted decompression (higher allocation and GC overhead) and, where the JVM allows it, catching OutOfMemoryError at the decompression boundary rather than letting it propagate through stream teardown, though that is a best-effort guard and not a substitute for the upgrade.

Affected VersionsENISA

snappy-java 1.1.7.4 <1.1.10.10

Affected Packages

euvd snappy_java fix: 1.1.10.10

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-415 (double free) in the buffer lifecycle of org.xerial.snappy.SnappyFramedInputStream, part of the snappy-java pure-Java binding to Google's Snappy compression codec. snappy-java is widely embedded transitively (Hadoop, Kafka, Spark, Cassandra, Elasticsearch and similar JVM data pipelines), and its framed stream implementation - not the classic SnappyInputStream format - manages heap and direct ByteBuffers through a pool to avoid per-stream allocation and GC pressure. In the vulnerable code path around SnappyFramedInputStream.java:243, buffers are released back to that pool before the replacement allocation is attempted; if the allocation then throws OutOfMemoryError, the stale fields (input, uncompressedDirect, buffer) are not cleared, so close() releases the same buffers again. Because the pool is shared, the doubly-released array can be re-issued to a different live stream, producing cross-stream disclosure or overwrite of decompressed bytes. The vendor fix (commit 139a53090a6662298924fd75d21f4769b4a219ea, released as v1.1.10.10) nulls the released references before allocation so a second release cannot occur; the same commit also documents the unchecked memory bounds of the off-heap rawCompress/rawUncompress entry points and rewrites SnappyInputStream's concatenated-header skipping as an iterative loop with lazily grown chunk buffers, hardening adjacent parsing paths. The CVSS 4.0 AT:P metric reflects the conditional, non-deterministic nature of exploitation, and the independent assessment scores it CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N.

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

Vendor (VulnCheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 4.8 MEDIUM

AV:N and PR:N since attacker-controlled framed input needs no auth; AC:H because the leak depends on an OOM-triggered double-release racing a shared-pool reuse; C:L/I:L for partial cross-stream data exposure/overwrite, A:N per vendor.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Red Hat 4.8 MEDIUM

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Xerial snappy-java from 1.1.7.4 before 1.1.10.10 contains a double release vulnerability in SnappyFramedInputStream that returns pooled buffers twice when replacement allocation fails. Attackers can supply framed data with a large declared chunk length to trigger OutOfMemoryError, causing shared backing arrays that expose or overwrite other streams' decompressed data.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
High
core Snappy compression library embedded across Kafka, Spark, Hadoop and many Java apps
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
High

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

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

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy