CVE-2026-108104 snappy-java 双重释放漏洞
影响可导致内存越界访问,泄露或篡改其他数据流内容
Xerial snappy-java 的 SnappyFramedInputStream 在处理帧数据时存在双重释放问题。当替换分配失败时,池化缓冲区会被释放两次。攻击者可通过构造声明超大块长度的帧数据触发 OutOfMemoryError,进而使多个数据流共享同一底层数组。
影响范围
Xerial snappy-java 1.1.7.4 起至 1.1.10.10 之前的版本。
漏洞详情
该漏洞属于双重释放(Double Free)类型,成因是 SnappyFramedInputStream 在替换分配失败路径上对池化缓冲区重复归还。攻击者提供声明超大 chunk 长度的 framed 数据,触发 OutOfMemoryError 后,缓冲区池状态被破坏,导致不同流共享同一 backing array。其后果是解压数据可能被其他流读取或覆盖,造成信息泄露或数据篡改。
利用条件与风险
利用需应用使用受影响版本并处理攻击者可控的 framed 压缩数据,且需触发内存分配失败条件,实战利用难度较高,但可造成跨流数据泄露。
修复建议
升级至 snappy-java 1.1.10.10 或更高版本;暂无公开信息说明其他临时缓解措施,建议限制不可信 framed 数据的输入并监控内存异常。
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.