首页 网络安全 正文
  • 本文约1847字,阅读需9分钟
  • 15
  • 0

MessagePack-Java易受远程拒绝服务CVE-2026-21452

摘要

栋科技漏洞库关注到 Listmonk 在版本6.0.0之前的版本存在安全漏洞,该漏洞现已被追踪为CVE-2026-21483,漏洞的CVSSS 4.0评分5.4。

MessagePack-Java 是 MessagePack 序列化格式 的官方 Java 实现库,比 JSON 更小的体积、更快的解析速度,同时保持跨语言兼容性。

一、基本情况

MessagePack是一种二进制序列化协议,在Java应用中高效完成对象序列化(将对象转为二进制)与反序列化(将二进制还原为对象)。

MessagePack-Java易受远程拒绝服务CVE-2026-21452

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

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接