Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅

突然有一天,老大突然在群里说,把fastjson 包升级到1.2.60,我一脸蒙蔽,听说有重大安全漏洞,就赶紧升级完提交测试了。

今天刚好有空,赶紧上全球最大的程序员同性交友网站扒拉扒拉看看具体bug,做到心里有点B数。

话不多说,上同性交友网站截图:

Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第1张图片

撸个代码试一下,实践是检验真理的唯一标准,也是找出bug的快速方法:

public class FastJsonTest {

    public static void main(String[] args) {
        String str = "{\"g\":\"\\x";
        Object obj = JSON.parse(str);
        System.out.println(str);
    }

}

写完,运行,然后报错,一气呵成。

Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第2张图片

看更新记录,这个解决方案直接加一层判断,贼6,就去老版本这里打个断点吧:

Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第3张图片

开启找你妹(debug)模式 :

Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第4张图片

 看,他来了

‘\u001A’ 表示已经读完了也就是EOF,然后看 x1  已经是结束,x2 再次为此,继续debug,

发现执行了putChar方法,执行完sp的值+1

然后继续执行,又返回scanString方法,又开始了一遍

可怕的事情来了。。。竟然进入了死循环,sp增加到sbuf.length(512)的时候,会进入if分支,开始扩容。

然后OOM。

咦,真吓人,赶紧升级1.2.60吧。

Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第5张图片

Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第6张图片 Fastjson 1.2.60以下版本 爆出重大漏洞,苦逼升级整个项目后,仔细分析具体原因,看看哪里的锅_第7张图片

你可能感兴趣的:(java)