CVE-2024-36114
High · 8.6CVSS
8.6
EPSS
0.5%
Published
May 29, 2024
CISA due date
—
Cloudanix analysis
A flaw in a Java library used for compressing and decompressing data can make programs crash or reveal private information when they process certain inputs from outside sources.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The vulnerability permits out-of-bounds memory access in LZ4, LZO, Snappy, and Zstandard decompressors because sun.misc.Unsafe is used without additional bounds checks, allowing reads or writes outside provided byte arrays or buffers and resulting in JVM crashes or memory disclosure.
Why it matters to the business
Services handling untrusted compressed data can suffer sudden process termination that disrupts availability or unintended exposure of process memory contents that may contain sensitive information.
How an attack unfolds
An attacker supplies specially crafted compressed input to any Java application using a vulnerable Aircompressor version for decompression; the library performs unsafe memory operations that either terminate the JVM or leak adjacent memory regions.
How to fix it
Upgrade to Aircompressor 0.27 or newer containing commit e139a31be059855a5a70f6994a4ecaa0adbbea7a; no workarounds are available.
How to confirm the fix worked
Confirm the deployed library version is 0.27 or later; retest decompression routines with previously crashing inputs to verify stability and absence of memory disclosure.
Typical attack path
- Locate Java applications or services that depend on Aircompressor for decompression of external data
- Generate input that triggers out-of-bounds access in one of the four supported decompressors
- Deliver the malicious payload through the normal data ingestion path
- Trigger JVM crash for denial of service or inspect leaked memory for sensitive content
How to detect it
Review application and JVM logs for sudden crashes or access-violation errors during decompression of external data; correlate with spikes in CPU or memory anomalies on affected hosts.
What your security team should do
- Immediately update all Aircompressor usages to the fixed version
- Identify and prioritize services that accept compressed data from untrusted sources
- Add runtime monitoring for unexpected JVM terminations during decompression
The record
Aircompressor is a library with ports of the Snappy, LZO, LZ4, and Zstandard compression algorithms to Java. All decompressor implementations of Aircompressor (LZ4, LZO, Snappy, Zstandard) can crash the JVM for certain input, and in some cases also leak the content of other memory of the Java process (which could contain sensitive information). When decompressing certain data, the decompressors try to access memory outside the bounds of the given byte arrays or byte buffers. Because Aircompressor uses the JDK class `sun.misc.Unsafe` to speed up memory access, no additional bounds checks are performed and this has similar security consequences as out-of-bounds access in C or C++, namely it can lead to non-deterministic behavior or crash the JVM. Users should update to Aircompressor 0.27 or newer where these issues have been fixed. When decompressing data from untrusted users, this can be exploited for a denial-of-service attack by crashing the JVM, or to leak other sensitive information from the Java process. There are no known workarounds for this issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | io.airlift:aircompressor | 0 | 0.27 |
| Chainguard | apache-nifi | 0 | 2.0.0-r0 |
| Chainguard | apache-nifi-compat | 0 | 2.0.0-r0 |
| Chainguard | apache-nifi-toolkit | 0 | 2.0.0-r0 |
| Chainguard | druid | 0 | 32.0.1-r1 |
| Chainguard | druid-compat | 0 | 32.0.1-r1 |
| Chainguard | pyspark-scala-2.13 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-bitnami-compat | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-compat | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-minimal | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-minimal-openjdk-11 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-minimal-openjdk-17 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-minimal-openjdk-8 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-openjdk-11 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-openjdk-17 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-openjdk-8 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-bitnami-compat | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-compat | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-minimal-openjdk-11 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-minimal-openjdk-17 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-minimal-openjdk-8 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-openjdk-11 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-openjdk-17 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.12-openjdk-8 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.13 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.13-compat | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.13-openjdk-11 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.13-openjdk-17 | 0 | 3.5.1-r6 |
| Chainguard | spark-3.5-scala-2.13-openjdk-8 | 0 | 3.5.1-r6 |
| Chainguard | trino | 0 | 449-r0 |
| Chainguard | trino-config | 0 | 449-r0 |
| Chainguard | trino-oci-entrypoint | 0 | 449-r0 |
| Chainguard | trino-plugin-accumulo | 0 | 449-r0 |
| Chainguard | trino-plugin-ai-functions | 0 | 449-r0 |
| Chainguard | trino-plugin-atop | 0 | 449-r0 |
| Chainguard | trino-plugin-bigquery | 0 | 449-r0 |
| Chainguard | trino-plugin-blackhole | 0 | 449-r0 |
| Chainguard | trino-plugin-cassandra | 0 | 449-r0 |
| Chainguard | trino-plugin-clickhouse | 0 | 449-r0 |
| Chainguard | trino-plugin-delta-lake | 0 | 449-r0 |
| Chainguard | trino-plugin-druid | 0 | 449-r0 |
| Chainguard | trino-plugin-duckdb | 0 | 449-r0 |
| Chainguard | trino-plugin-elasticsearch | 0 | 449-r0 |
| Chainguard | trino-plugin-example-http | 0 | 449-r0 |
| Chainguard | trino-plugin-exasol | 0 | 449-r0 |
| Chainguard | trino-plugin-exchange-filesystem | 0 | 449-r0 |
| Chainguard | trino-plugin-exchange-hdfs | 0 | 449-r0 |
| Chainguard | trino-plugin-faker | 0 | 449-r0 |
| Chainguard | trino-plugin-functions-python | 0 | 449-r0 |
| Chainguard | trino-plugin-geospatial | 0 | 449-r0 |
| Chainguard | trino-plugin-google-sheets | 0 | 449-r0 |
| Chainguard | trino-plugin-hive | 0 | 449-r0 |
| Chainguard | trino-plugin-http-event-listener | 0 | 449-r0 |
| Chainguard | trino-plugin-http-server-event-listener | 0 | 449-r0 |
| Chainguard | trino-plugin-hudi | 0 | 449-r0 |
| Chainguard | trino-plugin-iceberg | 0 | 449-r0 |
| Chainguard | trino-plugin-ignite | 0 | 449-r0 |
| Chainguard | trino-plugin-jmx | 0 | 449-r0 |
| Chainguard | trino-plugin-kafka | 0 | 449-r0 |
| Chainguard | trino-plugin-kafka-event-listener | 0 | 449-r0 |
| Chainguard | trino-plugin-kinesis | 0 | 449-r0 |
| Chainguard | trino-plugin-kudu | 0 | 449-r0 |
| Chainguard | trino-plugin-lakehouse | 0 | 449-r0 |
| Chainguard | trino-plugin-ldap-group-provider | 0 | 449-r0 |
| Chainguard | trino-plugin-local-file | 0 | 449-r0 |
| Chainguard | trino-plugin-loki | 0 | 449-r0 |
| Chainguard | trino-plugin-mariadb | 0 | 449-r0 |
| Chainguard | trino-plugin-memory | 0 | 449-r0 |
| Chainguard | trino-plugin-ml | 0 | 449-r0 |
| Chainguard | trino-plugin-mongodb | 0 | 449-r0 |
| Chainguard | trino-plugin-mysql | 0 | 449-r0 |
| Chainguard | trino-plugin-mysql-event-listener | 0 | 449-r0 |
| Chainguard | trino-plugin-opa | 0 | 449-r0 |
| Chainguard | trino-plugin-openlineage | 0 | 449-r0 |
| Chainguard | trino-plugin-opensearch | 0 | 449-r0 |
| Chainguard | trino-plugin-oracle | 0 | 449-r0 |
| Chainguard | trino-plugin-password-authenticators | 0 | 449-r0 |
| Chainguard | trino-plugin-phoenix5 | 0 | 449-r0 |
| Chainguard | trino-plugin-pinot | 0 | 449-r0 |
| Chainguard | trino-plugin-postgresql | 0 | 449-r0 |
| Chainguard | trino-plugin-prometheus | 0 | 449-r0 |
| Chainguard | trino-plugin-ranger | 0 | 449-r0 |
| Chainguard | trino-plugin-raptor-legacy | 0 | 449-r0 |
| Chainguard | trino-plugin-redis | 0 | 449-r0 |
| Chainguard | trino-plugin-redshift | 0 | 449-r0 |
| Chainguard | trino-plugin-resource-group-managers | 0 | 449-r0 |
| Chainguard | trino-plugin-session-property-managers | 0 | 449-r0 |
| Chainguard | trino-plugin-singlestore | 0 | 449-r0 |
| Chainguard | trino-plugin-snowflake | 0 | 449-r0 |
| Chainguard | trino-plugin-spooling-filesystem | 0 | 449-r0 |
| Chainguard | trino-plugin-sqlserver | 0 | 449-r0 |
| Chainguard | trino-plugin-teradata-functions | 0 | 449-r0 |
| Chainguard | trino-plugin-thrift | 0 | 449-r0 |
| Chainguard | trino-plugin-tpcds | 0 | 449-r0 |
| Chainguard | trino-plugin-tpch | 0 | 449-r0 |
| Chainguard | trino-plugin-vertica | 0 | 449-r0 |
| Wolfi | apache-nifi | 0 | 2.0.0-r0 |
| Wolfi | apache-nifi-compat | 0 | 2.0.0-r0 |
| Wolfi | apache-nifi-toolkit | 0 | 2.0.0-r0 |
| Wolfi | druid | 0 | 32.0.1-r1 |
| Wolfi | druid-compat | 0 | 32.0.1-r1 |
| Wolfi | pyspark-scala-2.13 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-bitnami-compat | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-compat | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-minimal | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-minimal-openjdk-11 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-minimal-openjdk-17 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-minimal-openjdk-8 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-openjdk-11 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-openjdk-17 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-openjdk-8 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-bitnami-compat | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-compat | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-minimal-openjdk-11 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-minimal-openjdk-17 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-minimal-openjdk-8 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-openjdk-11 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-openjdk-17 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.12-openjdk-8 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.13 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.13-compat | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.13-openjdk-11 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.13-openjdk-17 | 0 | 3.5.1-r6 |
| Wolfi | spark-3.5-scala-2.13-openjdk-8 | 0 | 3.5.1-r6 |
| Wolfi | trino | 0 | 449-r0 |
| Wolfi | trino-config | 0 | 449-r0 |
| Wolfi | trino-oci-entrypoint | 0 | 449-r0 |
| Wolfi | trino-plugin-accumulo | 0 | 449-r0 |
| Wolfi | trino-plugin-ai-functions | 0 | 449-r0 |
| Wolfi | trino-plugin-atop | 0 | 449-r0 |
| Wolfi | trino-plugin-bigquery | 0 | 449-r0 |
| Wolfi | trino-plugin-blackhole | 0 | 449-r0 |
| Wolfi | trino-plugin-cassandra | 0 | 449-r0 |
| Wolfi | trino-plugin-clickhouse | 0 | 449-r0 |
| Wolfi | trino-plugin-delta-lake | 0 | 449-r0 |
| Wolfi | trino-plugin-druid | 0 | 449-r0 |
| Wolfi | trino-plugin-duckdb | 0 | 449-r0 |
| Wolfi | trino-plugin-elasticsearch | 0 | 449-r0 |
| Wolfi | trino-plugin-example-http | 0 | 449-r0 |
| Wolfi | trino-plugin-exasol | 0 | 449-r0 |
| Wolfi | trino-plugin-exchange-filesystem | 0 | 449-r0 |
| Wolfi | trino-plugin-exchange-hdfs | 0 | 449-r0 |
| Wolfi | trino-plugin-faker | 0 | 449-r0 |
| Wolfi | trino-plugin-functions-python | 0 | 449-r0 |
| Wolfi | trino-plugin-geospatial | 0 | 449-r0 |
| Wolfi | trino-plugin-google-sheets | 0 | 449-r0 |
| Wolfi | trino-plugin-hive | 0 | 449-r0 |
| Wolfi | trino-plugin-http-event-listener | 0 | 449-r0 |
| Wolfi | trino-plugin-http-server-event-listener | 0 | 449-r0 |
| Wolfi | trino-plugin-hudi | 0 | 449-r0 |
| Wolfi | trino-plugin-iceberg | 0 | 449-r0 |
| Wolfi | trino-plugin-ignite | 0 | 449-r0 |
| Wolfi | trino-plugin-jmx | 0 | 449-r0 |
| Wolfi | trino-plugin-kafka | 0 | 449-r0 |
| Wolfi | trino-plugin-kafka-event-listener | 0 | 449-r0 |
| Wolfi | trino-plugin-kinesis | 0 | 449-r0 |
| Wolfi | trino-plugin-kudu | 0 | 449-r0 |
| Wolfi | trino-plugin-lakehouse | 0 | 449-r0 |
| Wolfi | trino-plugin-ldap-group-provider | 0 | 449-r0 |
| Wolfi | trino-plugin-local-file | 0 | 449-r0 |
| Wolfi | trino-plugin-loki | 0 | 449-r0 |
| Wolfi | trino-plugin-mariadb | 0 | 449-r0 |
| Wolfi | trino-plugin-memory | 0 | 449-r0 |
| Wolfi | trino-plugin-ml | 0 | 449-r0 |
| Wolfi | trino-plugin-mongodb | 0 | 449-r0 |
| Wolfi | trino-plugin-mysql | 0 | 449-r0 |
| Wolfi | trino-plugin-mysql-event-listener | 0 | 449-r0 |
| Wolfi | trino-plugin-opa | 0 | 449-r0 |
| Wolfi | trino-plugin-openlineage | 0 | 449-r0 |
| Wolfi | trino-plugin-opensearch | 0 | 449-r0 |
| Wolfi | trino-plugin-oracle | 0 | 449-r0 |
| Wolfi | trino-plugin-password-authenticators | 0 | 449-r0 |
| Wolfi | trino-plugin-phoenix5 | 0 | 449-r0 |
| Wolfi | trino-plugin-pinot | 0 | 449-r0 |
| Wolfi | trino-plugin-postgresql | 0 | 449-r0 |
| Wolfi | trino-plugin-prometheus | 0 | 449-r0 |
| Wolfi | trino-plugin-ranger | 0 | 449-r0 |
| Wolfi | trino-plugin-raptor-legacy | 0 | 449-r0 |
| Wolfi | trino-plugin-redis | 0 | 449-r0 |
| Wolfi | trino-plugin-redshift | 0 | 449-r0 |
| Wolfi | trino-plugin-resource-group-managers | 0 | 449-r0 |
| Wolfi | trino-plugin-session-property-managers | 0 | 449-r0 |
| Wolfi | trino-plugin-singlestore | 0 | 449-r0 |
| Wolfi | trino-plugin-snowflake | 0 | 449-r0 |
| Wolfi | trino-plugin-spooling-filesystem | 0 | 449-r0 |
| Wolfi | trino-plugin-sqlserver | 0 | 449-r0 |
| Wolfi | trino-plugin-teradata-functions | 0 | 449-r0 |
| Wolfi | trino-plugin-thrift | 0 | 449-r0 |
| Wolfi | trino-plugin-tpcds | 0 | 449-r0 |
| Wolfi | trino-plugin-tpch | 0 | 449-r0 |
| Wolfi | trino-plugin-vertica | 0 | 449-r0 |
Related vulnerabilities
- CVE-2025-67721 Aircompressor is a library with ports of the Snappy, LZO, LZ4, and Zstandard compression… Also affects io.airlift:aircompressor
- CVE-2026-22732 When applications specify HTTP response headers for servlet applications using Spring… Also affects apache-nifi
- CVE-2026-24281 Hostname verification in Apache ZooKeeper ZKTrustManager falls back to reverse DNS (PTR)… Also affects apache-nifi
- CVE-2026-24308 Improper handling of configuration values in ZKConfig in Apache ZooKeeper 3.8.5 and 3.9.4… Also affects apache-nifi
- CVE-2026-29062 jackson-core contains core low-level incremental ("streaming") parser and generator… Also affects apache-nifi
- CVE-2026-1225 ACE vulnerability in configuration file processing by QOS.CH logback-core up to and… Also affects apache-nifi
- CVE-2025-14763 Missing cryptographic key commitment in the Amazon S3 Encryption Client for Java may… Also affects apache-nifi
- CVE-2024-29371 In jose4j before 0.9.6, an attacker can cause a Denial-of-Service (DoS) condition by… Also affects apache-nifi