type
status
date
slug
summary
tags
category
icon
password

Jackson-databind 反序列化漏洞(CVE-2017-7525)

Jackson-databind 支持 Polymorphic Deserialization 特性(默认情况下不开启),当 json 字符串转换的 Target class 中有 polymorph fields,即字段类型为接口、抽象类或 Object 类型时,攻击者可以通过在 json 字符串中指定变量的具体类型 (子类或接口实现类),来实现实例化指定的类,借助某些特殊的 class,如 TemplatesImpl,可以实现任意代码执行。
所以,本漏洞利用条件如下:
  • 开启 JacksonPolymorphicDeserialization,即调用以下任意方法
    • Target class 需要有无参 constructor
    • Target class 中需要需要有字段类型为 Interface、abstract class、Object,并且使用的 Gadget 需要为其子类 / 实现接口

    漏洞环境

    环境启动后,Web运行在http://your-ip:8080/
    notion image

    漏洞复现

    CVE-2017-7525

    Jackson-databind 在设置 Target class 成员变量参数值时,若没有对应的 getter 方法,则会使用 SetterlessProperty 调用 getter 方法,获取变量,然后设置变量值。当调用 getOutputProperties() 方法时,会初始化 transletBytecodes 包含字节码的类,导致命令执行,具体可参考 java-deserialization-jdk7u21-gadget-note 中关于 TemplatesImpl 的说明。
    使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作为Gadget,发送如下请求,将会执行touch /tmp/prove1.txt
    notion image
    在靶场中即可发现创建文件命令已经执行
    notion image
    Apache Superset 硬编码JWT密钥导致认证绕过漏洞(CVE-2023-27524)Gogs 任意用户登录漏洞(CVE-2018-18925)
    Loading...