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 最危险,一个地方放开,整个应用都放开。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。