fastjson小于1.2.25版本反序列漏洞分析(CVE

作者:腾龙文浩
围观群众:122
更新于
fastjson小于1.2.25版本反序列漏洞分析(CVE

(1)影响范围

Fastjson<1.2.25

fastjson小于1.2.25版本反序列漏洞分析(CVE

(2)漏洞成因

@type属性:Fastjson支持在json数据中使用@type属性,该json数据会被反序列化成指定的对象类型,在反序列化过程中fastjson会调用parse(jsonStr)函数尝试对对象的属性进行赋值,若对象的javabean存在属性的setter方法则调用set方法,反之调用get方法。

import java.util.Map;

public class User {
    private String name;
    private Map map;
    public String getName() {
        System.out.println("getName is running ...");
        return name;
    }
    public void setName(String name) {
        System.out.println("setName is running ...");
        this.name=name;
    }
    @Override
    public String toString() {
        return "User

经过代码追踪,发现属性赋值是在FieldDeserializer.java的setValue函数中,因为map属性不存在set方法,故在setValue函数中fieldInfo.getOnly为true,method为getmap方法

public void setValue(Object object, Object value) {
    if (value==null //
        && fieldInfo.fieldClass.isPrimitive()) {
        return;
    }
    try {
        Method method=fieldInfo.method;
        if (method !=null) {
            if (fieldInfo.getOnly) {//set方法不存在,根据类型调用get方法
                if (fieldInfo.fieldClass==AtomicInteger.class) {
                    AtomicInteger atomic=(AtomicInteger) method.invoke(object);
                    if (atomic !=null) {
                        atomic.set(((AtomicInteger) value).get());
                    }
                } else if (fieldInfo.fieldClass==AtomicLong.class) {
                    AtomicLong atomic=(AtomicLong) method.invoke(object);
                    if (atomic !=null) {
 	

非特殊说明,本文版权归 成益经验网 所有,转载请注明出处.

本文分类: 历史

本文标题: fastjson小于1.2.25版本反序列漏洞分析(CVE

本文网址: http://chengyi0769.com/lishi/418.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。