Jackson-databind 反序列化漏洞(CVE-2017-7525)
Vulnhub官方复现教程
https://vulhub.org/#/environments/jackson/CVE-2017-7525/
漏洞原理
Jackson-databind 支持 Polymorphic Deserialization 特性(默认情况下不开启),当 json 字符串转换的 Target class 中有 polymorph fields,即字段类型为接口、抽象类或 Object 类型时,攻击者可以通过在 json 字符串中指定变量的具体类型 (子类或接口实现类),来实现实例化指定的类,借助某些特殊的 class,如 TemplatesImpl
,可以实现任意代码执行。
所以,本漏洞利用条件如下:
-
开启 JacksonPolymorphicDeserialization,即调用以下任意方法
objectMapper.enableDefaultTyping(); // default to using DefaultTyping.OBJECT_AND_NON_CONCRETE objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
-
Target class 需要有无参 constructor
-
Target class 中需要需要有字段类型为 Interface、abstract class、Object,并且使用的 Gadget 需要为其子类 / 实现接口
复现过程
启动环境
https://blog.csdn.net/JiangBuLiu/article/details/93853056
进入路径为
cd /root/vulhub/jackson/CVE-2017-7525
搭建及运行漏洞环境:
docker-compose build && docker-compose up -d
用时:2分钟
环境启动后,访问