jackson-databind 又出绕过:泛型参数里的类型 ID 校验漏洞
✦
← CSDN

jackson-databind 又出绕过:泛型参数里的类型 ID 校验漏洞

楼主:超级管理员 · 2026-11-02 12:05 · 浏览 32

Java 反序列化 jackson 漏洞
超级管理员 楼主

jackson-databind 又出绕过:泛型参数里的类型 ID 校验漏洞

jackson-databind 出现一个新的高危漏洞,编号 CVE-2026-110879,本质是多态类型校验绕过,CVSS 9.8。

漏洞机理

jackson 的多态类型功能允许 JSON 里带一个类名,反序列化时按这个名字实例化对象。之前出过多次 RCE,官方加了校验:检查类型 ID 是否在白名单里。这次的问题在于,校验只覆盖了外层类名,泛型参数里指定的类可以被攻击者控制而没被检查。也就是说外层类是安全的,但它内部的泛型参数指向了一个危险的类,最终仍然能串成 gadget 链。

为什么这个库总是出问题

因为它要解决的需求本身就是危险的:让外部输入决定实例化哪个类。任何在这条路上加的白名单都是补丁式防御,而 Java 生态里可被利用的 gadget 链又特别多。这不是某一次实现疏忽,是设计取舍的必然代价。

处置动作

第一,升级 jackson-databind 到修复版本。第二,检查所有 Java 服务里有没有开启 default typing,尤其是 enableDefaultTyping 或者 activateDefaultTyping 配了非限制性多态类型的。第三,对来自不可信来源的 JSON,直接关掉多态类型,这是最彻底的做法。第四,如果有对外接口接收 JSON 并且内部做了泛型反序列化,重点排查。

上游设计的教训

类型白名单要覆盖整个对象图,包括泛型参数、数组元素类型、Map 的键和值类型。只校验最外层等于没校验,攻击者只需要往下走一层。

排查工具

可以用静态扫描找 enableDefaultTyping 和 activateDefaultTyping 的调用点,再看对应的 ObjectMapper 有没有加 BasicPolymorphicTypeValidator 并且确实做了限制。注意全局单例的 ObjectMapper 最危险,一个地方放开,整个应用都放开。

jackson-databind 又出绕过:泛型参数里的类型 ID 校验漏洞 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

曹雨桐

只校验外层类名等于没校验,攻击者往下走一层就行。我们排查时发现最危险的是全局单例的 ObjectMapper,一个地方开了 default typing,整个应用都开了。建议直接把这条加成静态扫描规则。

路人0742

请教这个泛型参数的洞怎么判断自己有没有暴露?我们是接收前端 JSON 的普通接口,DTO 都是固定类,没开多态类型。这种情况是不是升级版本就行,还要额外改配置吗。

路人0825

我们项目用了 Jackson 的多态反序列化,配置是前任留下的,我不太敢动。想问一下怎么快速判断有没有开默认类型信息?如果已经开了,是不是必须改成显式注解,有没有改动最小的做法?

登录 后参与回复