FastJson 1.2.24 反序列化 RCE 漏洞如何进行代码审计分析?

摘要:代码审计 | FastJson 1.2.24 反序列化 RCE 漏洞分析 本文从环境搭建出发,一步一步分析 FastJson 反序列化 RCE 的完整利用链,并结合调试断点深入分析底层代码执行逻辑。 目录 漏洞背景 环境准备 搭建 Mave
代码审计 | FastJson 1.2.24 反序列化 RCE 漏洞分析 本文从环境搭建出发,一步一步分析 FastJson 反序列化 RCE 的完整利用链,并结合调试断点深入分析底层代码执行逻辑。 目录 漏洞背景 环境准备 搭建 Maven 项目 FastJson @type 机制初探(User 例子) parseObject 两种调用方式的本质区别 PoC 复现:JdbcRowSetImpl 利用链 底层代码调试分析 完整漏洞链路总结 修复建议 一、漏洞背景 FastJson 是阿里巴巴开源的高性能 JSON 解析库,广泛用于 Java 后端项目。 漏洞版本:≤ 1.2.24 核心原因是 @type 字段允许任意类加载,攻击者可以通过在 JSON 数据中指定恶意类,触发该类的危险方法,最终实现远程代码执行(RCE)。 简单来说,FastJson 在解析 JSON 的时候,如果发现有 @type 这个字段,它会把里面的值当作类名,直接去加载这个类——而且没有任何白名单限制。这个设计在 1.2.24 及以下版本是完全开放的,给了攻击者可乘之机。 二、环境准备 测试环境: JDK:java 8u64 ⚠️ 这里必须用低版本 JDK,原因很关键:从 JDK 8u191 开始,Java 对 JNDI 远程类加载做了限制(com.sun.jndi.rmi.object.trustURLCodebase 默认设为 false),也就是说高版本 JDK 直接阻断了通过 RMI 加载远程恶意类这条路。所以要复现这个漏洞,必须用 8u191 以下的版本。 FastJson 版本:1.2.24 相关资源: JNDI 注入利用工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar FastJson 1.2.24 依赖:https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.24/ FastJson 1.2.27(对比参考):https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.27/ 三、搭建 Maven 项目 第一步:建 Maven 项目 第二步:添加 FastJson 依赖 在 pom.xml 的 </properties> 后面加入以下依赖: <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version> </dependency> </dependencies> 第三步:下载依赖 依赖下载成功后可以看到: 四、FastJson @type 机制初探(User 例子) 在正式打漏洞之前,先搞懂 @type 到底是干什么的,用一个简单的自定义类来演示。
阅读全文