FastJson版本差异以及绕WAF的思路
字数 1361 2025-08-10 12:18:01

FastJson版本差异与WAF绕过技术深度分析

一、FastJson基础原理

FastJson是阿里巴巴开源的高性能JSON处理库,在反序列化过程中存在潜在安全风险。其核心处理流程如下:

  1. DefaultJSONParser#parseObject:入口方法,负责解析JSON字符串
  2. ObjectDeserializer:通过config.getDeserializer(type)获取反序列化器
  3. checkAutoType机制:安全校验核心,不同版本实现有差异

二、版本演进与安全修复

1.2.24版本

  • 引入checkAutoType机制
  • 默认关闭autoTypeSupport
  • 使用黑名单机制
  • 添加黑名单管理接口

1.2.41版本

  • 黑名单进行hash处理防止直接绕过
  • ParserConfig#checkAutoType中去除L;后缀
  • 绕过方式:双写类名(如LLcom.example.EvilClass;;

1.2.42版本

  • 检测多个L抛出异常
  • 新绕过方式:使用[前缀(如[com.example.EvilClass

1.2.43版本

  • 修复[前缀绕过漏洞

1.2.45版本

  • 修复org.apache.ibatis.datasource.jndi.JndiDataSourceFactory黑名单绕过

1.2.47版本

  • 修复Class.class绕过:
    • 设置Cache为false
    • loadClass重载方法默认不缓存
    • 防止通过Class提前缓存恶意类名

1.2.50-1.2.51版本

  • 添加RowSet.class过滤
  • oracle.jdbc.rowset.OracleJDBCRowSet加入黑名单

1.2.68版本

  • java.lang.AutoCloseable加入黑名单

1.2.80版本

  • 进一步扩展黑名单内容

三、WAF绕过思路

1. 编码绕过

  • Unicode编码
  • Hex编码
  • Base64编码
  • 特殊字符插入(如空白字符、注释等)

2. 语法变形

  • 改变JSON键值顺序
  • 添加无意义字段
  • 使用不同引号风格

3. 类名混淆

  • 使用反射间接引用类
  • 通过ClassLoader动态加载
  • 利用中间类间接触发

4. 上下文利用

  • 结合应用已有类进行二次利用
  • 通过合法操作链触发恶意行为

四、防御建议

  1. 版本升级:始终使用最新稳定版本
  2. 关闭autoType:确保autoTypeSupport为false
  3. 自定义黑名单:根据业务补充黑名单
  4. 输入过滤:对JSON输入进行严格校验
  5. 沙箱环境:在隔离环境中处理不可信JSON
  6. WAF规则:针对已知绕过方式制定防护规则

五、实战检测方法

  1. 版本识别:通过报错信息或特性检测确定FastJson版本
  2. 根据版本选择对应的测试Payload
  3. 使用DNSLog等工具验证漏洞存在性
  4. 逐步尝试各种绕过技术

六、研究资源

  1. 持续关注FastJson官方安全公告
  2. 分析GitHub提交记录中的安全修复
  3. 收集公开漏洞利用代码(PoC)
  4. 参与安全社区讨论获取最新绕过技术

通过深入理解FastJson各版本差异和安全机制演变,安全研究人员可以更有效地发现潜在漏洞,同时帮助开发人员构建更安全的JSON处理方案。

FastJson版本差异与WAF绕过技术深度分析 一、FastJson基础原理 FastJson是阿里巴巴开源的高性能JSON处理库,在反序列化过程中存在潜在安全风险。其核心处理流程如下: DefaultJSONParser#parseObject :入口方法,负责解析JSON字符串 ObjectDeserializer :通过 config.getDeserializer(type) 获取反序列化器 checkAutoType机制 :安全校验核心,不同版本实现有差异 二、版本演进与安全修复 1.2.24版本 引入 checkAutoType 机制 默认关闭 autoTypeSupport 使用黑名单机制 添加黑名单管理接口 1.2.41版本 黑名单进行hash处理防止直接绕过 ParserConfig#checkAutoType 中去除 L; 后缀 绕过方式 :双写类名(如 LLcom.example.EvilClass;; ) 1.2.42版本 检测多个 L 抛出异常 新绕过方式 :使用 [ 前缀(如 [com.example.EvilClass ) 1.2.43版本 修复 [ 前缀绕过漏洞 1.2.45版本 修复 org.apache.ibatis.datasource.jndi.JndiDataSourceFactory 黑名单绕过 1.2.47版本 修复 Class.class 绕过: 设置 Cache 为false loadClass 重载方法默认不缓存 防止通过Class提前缓存恶意类名 1.2.50-1.2.51版本 添加 RowSet.class 过滤 将 oracle.jdbc.rowset.OracleJDBCRowSet 加入黑名单 1.2.68版本 将 java.lang.AutoCloseable 加入黑名单 1.2.80版本 进一步扩展黑名单内容 三、WAF绕过思路 1. 编码绕过 Unicode编码 Hex编码 Base64编码 特殊字符插入(如空白字符、注释等) 2. 语法变形 改变JSON键值顺序 添加无意义字段 使用不同引号风格 3. 类名混淆 使用反射间接引用类 通过ClassLoader动态加载 利用中间类间接触发 4. 上下文利用 结合应用已有类进行二次利用 通过合法操作链触发恶意行为 四、防御建议 版本升级 :始终使用最新稳定版本 关闭autoType :确保 autoTypeSupport 为false 自定义黑名单 :根据业务补充黑名单 输入过滤 :对JSON输入进行严格校验 沙箱环境 :在隔离环境中处理不可信JSON WAF规则 :针对已知绕过方式制定防护规则 五、实战检测方法 版本识别:通过报错信息或特性检测确定FastJson版本 根据版本选择对应的测试Payload 使用DNSLog等工具验证漏洞存在性 逐步尝试各种绕过技术 六、研究资源 持续关注FastJson官方安全公告 分析GitHub提交记录中的安全修复 收集公开漏洞利用代码(PoC) 参与安全社区讨论获取最新绕过技术 通过深入理解FastJson各版本差异和安全机制演变,安全研究人员可以更有效地发现潜在漏洞,同时帮助开发人员构建更安全的JSON处理方案。