Jackson 远程代码执行漏洞(CVE-2020-36180)

Artio 于 2022-03-14 发布

一:漏洞简介

FasterXML Jackson是美国FasterXML公司的一款适用于Java的数据处理工具。jackson-databind是其中的一个具有数据绑定功能的核心组件之一。FasterXML jackson-databind 2.x < 2.9.10.8的版本存在该漏洞,该漏洞是由于org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS组件库存在不安全的反序列化,导致攻击者可以利用漏洞实现远程代码执行。

二:利用条件

开启enableDefaultTyping()

使用了com.h2database\com.newrelic.agent.java第三方依赖库

三:漏洞复现

  1. 环境搭建
    • 使用idea的maven项目进行环境搭建,操作如下所示:
    • 新建一个项目,选择maven
    • CVE-2020-36180_1.png
    • 填好项目名称和路径后点击Finish,idea会自动创建一个项目
    • CVE-2020-36180_2.png
    • 初始状态如图所示:
    • CVE-2020-36180_3.png
    • 接下来替换漏洞需要的pom.xml,然后保存,idea会自动下载依赖
    • CVE-2020-36180_4.png
    • 如果没有自动下载,可以点击这里手动加载
    • CVE-2020-36180_5.png
    • 接下来可以在src -> main -> java -> poc.java创建一个poc.java文件
    • CVE-2020-36180_6.png
    • 然后需要启一个web服务并在目录下放入exec.sql这个sql文件用于反序列化成功后执行命令
    • CVE-2020-36180_7.png
    • 然后启动web服务并监听某端口
    • CVE-2020-36180_8.png
    • 然后执行java文件会发现已弹出计算器
    • CVE-2020-36180_9.png
  2. 踩坑记录
    • 执行java文件时报错程序包com.fasterxml.jackson.databind不存在
    • CVE-2020-36180_10.png
    • 这个问题我们需要在项目根目录依次执行以下命令:
    • mvn clean install -Dmaven.test.skip=true
    • mvn -U idea:idea
    • CVE-2020-36180_11.jpg
    • 然后我们会看见 BUILD SUCCESS字样代表安装成功
    • 如果发现执行完命令后出现error报错并且发现BUILD FAILURE字样,这时候可以尝试切换不同版本的mvn试试,可能与jdk版本以及mvn版本有关,如下:
    • CVE-2020-36180_12.png
    • 然后我们继续执行java文件可能会报错:
    • CVE-2020-36180_13.png
    • 这个错误是因为ObjectMapper的默认配置问题,我们需要更改ObjectMapper的默认配置,如上图所示新增一行代码或者已注释的部分代码都可以解决该问题
    • 还有可能遇到的问题是pom文件中配置了jackson的相关信息但是并没有起作用,还是报程序包com.fasterxml.jackson.databind不存在,这时我们可以尝试把这三个依赖的版本设置为同样的版本,并且重新加载maven。
    • 还有可能遇到程序报错:mapper.enableDefaultTyping(); 方法已过期,这时我们需要在pom.xml中查看jackson-databind版本是否>=2.10.0,Jackson ObjectMapper 中的 enableDefaultTyping 方法从 2.10.0 开始标记为过期,这时我们可以使用activateDefaultTyping方法来替代它或者切换版本到小于2.10.0版本。
  3. 个人github:https://artio-li.github.io/

五:参考链接

https://github.com/Al1ex/CVE-2020-36179

https://cn-sec.com/archives/245131.html

https://stackoverflow.com/questions/23469784/com-fasterxml-jackson-databind-exc-unrecognizedpropertyexception-unrecognized-f#

https://blog.csdn.net/ls0111/article/details/77507340

https://segon.cn/jackson-objectmapper-enabledefaulttyping-deprecated.html