Jackson的漏洞主要集中在jackson-databind中,当启用Global default typing时,类似于FastJson的autoType,会存在各种各样的反序列化绕过类,而官方更新的防护措施一般都是将新出现的恶意类加入黑名单,如果需要完全杜绝这种频繁的升级体验,可以升级到2.10.x版本,这个版本中Jackson使用了白名单进行恶意类的防护,以下是关于Jackson漏洞的详细分析:
Jackson反序列化漏洞
CVE-2020-36188漏洞
漏洞描述:FasterXML jackson-databind 2.x < 2.9.10.8的版本存在该漏洞,该漏洞是由于com.newrelic.agent.deps.ch.qos.logback.core.db.JNDIConnectionSource组件库存在不安全的反序列化,导致攻击者可能利用漏洞实现远程代码执行。
影响版本:2.x < 2.9.10.8
防护措施:升级至2.9.10.8或更高版本。
CVE-2020-8840漏洞
漏洞描述:jackson-databind由JNDI注入导致的远程代码执行漏洞(CVE-2020-8840),CVSS评分为9.8,受影响版本的jackson-databind中由于缺少某些xbean-reflect/JNDI黑名单类,如org.apache.xbean.propertyeditor.JndiConverter,可导致攻击者使用JNDI注入的方式实现远程代码执行。
影响版本:2.0.0 <= FasterXML jackson-databind <= 2.9.10.2
防护措施:升级至2.9.10.3或更高版本。
Jackson反序列化漏洞详细分析
漏洞原因
Jackson反序列化漏洞的原因与fastjson反序列化漏洞类似,主要分为以下两种:
1、目标类的构造函数、set系列函数含有恶意操作,并且参数可控制:这种情况较为苛刻,现代编程中很少出现。
2、目标类的子类、或者目标类的属性的子类的构造函数、set系列函数含有恶意操作,并且参数可控制:这是当前主流的反序列化漏洞利用方式,目标类有一个属性类型为Object,那么服务端中任意其他类都能被利用。
漏洞条件
要触发Jackson反序列化漏洞,通常需要满足以下条件:
开启enableDefaultTyping:Jackson默认关闭此功能,但在某些情况下可能会被开启。
存在Gadget类:这些类通常非常罕见,且需要特定的第三方库支持。
POC代码示例
以下是一个简单的POC代码示例,用于演示如何利用Jackson反序列化漏洞:
import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonTest { public static void main(String[] args) throws Exception { // 创建一个包含恶意操作的目标对象 UnsafeObject unsafeObject = new UnsafeObject("calc.exe"); // 序列化目标对象 ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(unsafeObject); System.out.println(json); // 反序列化目标对象,触发恶意操作 UnsafeObject obj = mapper.readValue(json, UnsafeObject.class); System.out.println(obj); } } class UnsafeObject { private String cmd; UnsafeObject() { System.out.println("UnsafeObject init success"); } UnsafeObject(String cmd) { this.cmd = cmd; } public String getCmd() { return cmd; } public void setCmd(String cmd) { this.cmd = cmd; System.out.println(String.format("UnsafeObject execute cmd: %s", cmd)); try { Runtime.getRuntime().exec(cmd); } catch (Exception e) { e.printStackTrace(); } } }
防护措施
1、升级Jackson版本:确保使用的Jackson版本不受已知漏洞影响,对于CVE-2020-36188和CVE-2020-8840漏洞,应升级至2.9.10.8或更高版本。
2、禁用enableDefaultTyping:在不需要的情况下,禁用enableDefaultTyping功能以减少反序列化漏洞的风险。
3、使用白名单:从2.10.x版本开始,Jackson使用了白名单进行恶意类的防护,这可以有效减少因黑名单更新不及时而导致的安全问题。
Jackson反序列化漏洞是一个严重的安全问题,但通过及时升级版本、采取适当的防护措施以及避免不必要的功能开启,可以大大降低其带来的风险。
到此,以上就是小编对于Jackson的漏洞的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/88726.html