Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl)
字数 2004 2025-08-15 21:32:43

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

1. 漏洞概述

1.1 漏洞基本信息

  • 漏洞名称: Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl)
  • 漏洞类型: 远程代码执行
  • 危害等级: 高危
  • 影响版本: Fastjson < 1.2.25

1.2 组件介绍

Fastjson是一个高性能的Java JSON库,特点包括:

  • 采用"假定有序快速匹配"算法,性能优异
  • 接口简单易用
  • 广泛应用于缓存序列化、协议交互、Web输出、Android客户端等场景

1.3 漏洞原理

漏洞利用fastjson autotype在处理json对象时,未对@type字段进行充分的安全性验证,攻击者可传入危险类,服务器执行其中恶意代码。

2. 漏洞利用条件与影响

2.1 利用条件

  • 无特殊条件要求
  • 只要使用受影响版本的Fastjson并解析外部输入的JSON数据即可

2.2 漏洞影响

攻击者可实现:

  • 远程代码执行
  • 服务器敏感信息泄露
  • 对服务器数据进行增删改操作
  • 完全控制受影响服务器

3. 技术背景

3.1 JavaBean规范

JavaBean是特殊的Java类,需满足:

  1. 提供默认无参构造函数
  2. 实现Serializable接口
  3. 有一系列可读写属性
  4. 有规范的getter/setter方法

示例:

public class StudentsBean implements java.io.Serializable {
    private String firstName = null;
    private String lastName = null;
    private int age = 0;
    
    public StudentsBean() {}
    
    public String getFirstName(){ return firstName; }
    public void setFirstName(String firstName){ this.firstName = firstName; }
    // 其他getter/setter...
}

4. 漏洞详细分析

4.1 漏洞触发流程

  1. JSON解析入口

    • 调用parseObject方法解析传入的JSON数据
    • 使用DefaultJSONParser进行解析
    • 获取ParserConfig中的初始配置和黑名单
  2. @type字段处理

    • 解析到@type字段时,获取其值
    • 调用TypeUtils.loadClass加载指定类
    • 先在mappings中查找,找不到则使用contextClassLoader.loadClass加载
  3. 反序列化器获取

    • 调用getDeserializer获取反序列化器
    • 检查黑名单
    • 检查META-INF/services/下的服务
    • 最终调用createJavaBeanDeserializer生成JavaBean反序列化器
  4. JavaBean构建

    • 通过反射获取类所有属性和方法
    • 选择无参构造函数作为默认构造器
    • 筛选符合规范的setter/getter方法
    • 构建JavaBeanInfo对象
  5. 恶意代码执行

    • 解析_outputProperties参数时
    • 通过反射调用getOutputProperties方法
    • 实例化从bytecode传入的恶意class文件
    • 实现攻击

4.2 关键攻击点

  • 利用TemplatesImpl类的特性
  • 通过_bytecodes属性传入恶意字节码
  • 触发getOutputProperties方法执行恶意代码

5. 补丁分析(Fastjson 1.2.25)

  1. 新增checkAutoType方法

    • 设置autotype开关
    • 对@type字段进行严格限制
    • 关闭autotype后无法通过@type传入类进行攻击
  2. 扩展黑名单

    • 增加更多危险类到黑名单
    • 拦截已知的fastjson gadget链

6. 防御方案

6.1 通用修复方案

  • 升级Fastjson: 升级到1.2.25或更高版本
  • 禁用autotype: 设置ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
  • 使用安全模式: 配置Feature.SafeMode

6.2 深信服产品防护方案

  1. 下一代防火墙

    • 更新至最新安全防护规则
    • 可轻松防御此漏洞
  2. 云盾

    • 已自动更新防护规则
    • 用户无需操作即可防御
  3. 安全感知平台

    • 检测利用该漏洞的攻击
    • 实时告警
    • 可联动防火墙封堵攻击IP
  4. 安全运营服务

    • 7*24小时持续安全运营
    • 自动检查并更新防护策略

7. 参考链接

  1. JavaBean教程: https://www.runoob.com/jsp/jsp-javabean.html
  2. Fastjson RCE分析: http://xxlegend.com/2018/10/23/基于JdbcRowSetImpl的Fastjson RCE PoC构造与分析/
  3. Fastjson 1.2.24到1.2.25的变更: https://github.com/alibaba/fastjson/compare/1.2.24...1.2.25

8. 总结

Fastjson 1.2.24及之前版本存在严重的远程代码执行漏洞,攻击者可通过精心构造的JSON数据在目标服务器上执行任意代码。建议所有使用Fastjson的用户立即升级到1.2.25或更高版本,并按照本文提供的防御方案进行防护。

Fastjson 1.2.24远程代码执行漏洞分析与防御指南 1. 漏洞概述 1.1 漏洞基本信息 漏洞名称 : Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl) 漏洞类型 : 远程代码执行 危害等级 : 高危 影响版本 : Fastjson < 1.2.25 1.2 组件介绍 Fastjson是一个高性能的Java JSON库,特点包括: 采用"假定有序快速匹配"算法,性能优异 接口简单易用 广泛应用于缓存序列化、协议交互、Web输出、Android客户端等场景 1.3 漏洞原理 漏洞利用fastjson autotype在处理json对象时,未对@type字段进行充分的安全性验证,攻击者可传入危险类,服务器执行其中恶意代码。 2. 漏洞利用条件与影响 2.1 利用条件 无特殊条件要求 只要使用受影响版本的Fastjson并解析外部输入的JSON数据即可 2.2 漏洞影响 攻击者可实现: 远程代码执行 服务器敏感信息泄露 对服务器数据进行增删改操作 完全控制受影响服务器 3. 技术背景 3.1 JavaBean规范 JavaBean是特殊的Java类,需满足: 提供默认无参构造函数 实现Serializable接口 有一系列可读写属性 有规范的getter/setter方法 示例: 4. 漏洞详细分析 4.1 漏洞触发流程 JSON解析入口 调用 parseObject 方法解析传入的JSON数据 使用 DefaultJSONParser 进行解析 获取 ParserConfig 中的初始配置和黑名单 @type字段处理 解析到 @type 字段时,获取其值 调用 TypeUtils.loadClass 加载指定类 先在mappings中查找,找不到则使用 contextClassLoader.loadClass 加载 反序列化器获取 调用 getDeserializer 获取反序列化器 检查黑名单 检查 META-INF/services/ 下的服务 最终调用 createJavaBeanDeserializer 生成JavaBean反序列化器 JavaBean构建 通过反射获取类所有属性和方法 选择无参构造函数作为默认构造器 筛选符合规范的setter/getter方法 构建 JavaBeanInfo 对象 恶意代码执行 解析 _outputProperties 参数时 通过反射调用 getOutputProperties 方法 实例化从bytecode传入的恶意class文件 实现攻击 4.2 关键攻击点 利用 TemplatesImpl 类的特性 通过 _bytecodes 属性传入恶意字节码 触发 getOutputProperties 方法执行恶意代码 5. 补丁分析(Fastjson 1.2.25) 新增 checkAutoType 方法 设置autotype开关 对@type字段进行严格限制 关闭autotype后无法通过@type传入类进行攻击 扩展黑名单 增加更多危险类到黑名单 拦截已知的fastjson gadget链 6. 防御方案 6.1 通用修复方案 升级Fastjson : 升级到1.2.25或更高版本 禁用autotype : 设置 ParserConfig.getGlobalInstance().setAutoTypeSupport(false); 使用安全模式 : 配置 Feature.SafeMode 6.2 深信服产品防护方案 下一代防火墙 更新至最新安全防护规则 可轻松防御此漏洞 云盾 已自动更新防护规则 用户无需操作即可防御 安全感知平台 检测利用该漏洞的攻击 实时告警 可联动防火墙封堵攻击IP 安全运营服务 7* 24小时持续安全运营 自动检查并更新防护策略 7. 参考链接 JavaBean教程: https://www.runoob.com/jsp/jsp-javabean.html Fastjson RCE分析: http://xxlegend.com/2018/10/23/基于JdbcRowSetImpl的Fastjson RCE PoC构造与分析/ Fastjson 1.2.24到1.2.25的变更: https://github.com/alibaba/fastjson/compare/1.2.24...1.2.25 8. 总结 Fastjson 1.2.24及之前版本存在严重的远程代码执行漏洞,攻击者可通过精心构造的JSON数据在目标服务器上执行任意代码。建议所有使用Fastjson的用户立即升级到1.2.25或更高版本,并按照本文提供的防御方案进行防护。