fastjson (1概述)

一、fastjson 是什么?

fastjson 是阿里巴巴开发的一款 Java 语言编写的高性能 JSON 解析框架,广泛用于 Java 项目中实现 JSON 和 Java 对象的相互转换。但由于其早期设计的一些特性,导致它成为了安全漏洞的重灾区。

二、fastjson 核心漏洞解析

1. 漏洞核心成因

fastjson 最致命的漏洞是 反序列化漏洞,核心原因是:

  • fastjson 支持通过 @type 字段指定要反序列化的目标类;
  • 早期版本未对反序列化的类做严格校验,攻击者可以构造恶意的 JSON 字符串,指定加载危险的第三方类(如 com.sun.rowset.JdbcRowSetImpl);
  • 这些危险类在实例化时会执行恶意代码(如远程加载恶意类、执行系统命令),最终导致服务器被控制。
2. 典型高危漏洞版本
  • fastjson 1.2.24 及以下版本:存在严重的远程代码执行(RCE)漏洞(CNVD-2017-02833);
  • fastjson 1.2.47 及以下版本:修复不彻底,仍存在绕过漏洞(CNVD-2019-22238);
  • fastjson 1.2.68 及以下版本:仍有部分场景的绕过漏洞。
3. 漏洞的影响
  • 攻击者可远程执行任意系统命令(如创建文件、删除数据、植入木马);
  • 控制服务器,窃取敏感数据(数据库账号、密码等);
  • 横向渗透到内网其他服务器,造成更大范围的安全事故。

三、漏洞防护与修复方案

1. 紧急修复:升级到安全版本

这是最核心、最有效的措施,推荐直接升级到官方确认无高危漏洞的版本:

  • 生产环境优先选择:fastjson 2.0.43 及以上(2.x 系列重构了核心逻辑,安全性大幅提升);
  • 若无法升级到 2.x,可升级到 1.x 最新稳定版:fastjson 1.2.83(仅临时过渡,建议最终迁移到 2.x)。

升级方式(Maven 依赖示例):

XML 复制代码
<!-- 推荐使用 fastjson2(2.x 版本) -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.43</version>
</dependency>

<!-- 若必须使用 1.x 版本 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>
2. 临时防护(无法立即升级时)

如果暂时无法升级版本,可通过配置限制反序列化行为:

java 复制代码
import com.alibaba.fastjson.parser.ParserConfig;

public class FastjsonSafeConfig {
    public static void init() {
        // 1. 关闭自动类型检测(核心配置)
        ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
        
        // 2. 只允许反序列化指定的白名单类(按需添加)
        ParserConfig.getGlobalInstance().addAccept("com.youproject.model."); // 仅允许自己项目的模型类
        
        // 3. 禁止加载危险类(补充防护)
        ParserConfig.getGlobalInstance().addDeny("com.sun.rowset.");
        ParserConfig.getGlobalInstance().addDeny("java.lang.");
    }
}
3. 代码层面规范
  • 避免在对外接口中直接使用 JSON.parseObject(String text),改用指定类型的方式:

    java 复制代码
    // 不安全写法(会触发自动类型检测)
    Object obj = JSON.parseObject(jsonStr);
    
    // 安全写法(指定具体类,不触发自动类型)
    User user = JSON.parseObject(jsonStr, User.class);
  • 对外接口接收 JSON 数据时,优先使用 DTO 类接收,避免解析为通用 Object 类型。

四、漏洞检测方法

  1. 工具检测:使用专业安全工具(如 AWVS、Nessus)扫描项目接口,检测是否存在 fastjson 反序列化漏洞;

  2. 依赖检查 :通过 Maven/Gradle 查看依赖树,确认 fastjson 版本:

    bash 复制代码
    # Maven 查看依赖树
    mvn dependency:tree | grep fastjson
    
    # Gradle 查看依赖树
    gradle dependencies | grep fastjson
  3. 代码审计 :检查项目中是否有 JSON.parseObject 无类型指定的写法,是否开启了自动类型支持。

总结

  1. 核心风险:fastjson 漏洞的本质是反序列化时的自动类型检测机制被滥用,导致远程代码执行,1.2.47 及以下版本风险极高;
  2. 首要防护:立即升级到 fastjson 2.x 最新版本(如 2.0.43+),或 1.x 系列的 1.2.83+;
  3. 代码规范:禁止无类型指定的 JSON 解析,配置白名单限制反序列化类,从代码层面减少漏洞暴露面。
相关推荐
谢亮_vipxieliang19 分钟前
Kubernetes 1.36 深度解读:从 kubelet 安全到 GPU 原生调度的 70 项改进
安全·kubernetes·kubelet
Knight_AL1 小时前
基于 Netty 实现的 WebSocket 服务端
网络·websocket·网络协议
YH行业报告分析1 小时前
2026衬氟调节阀市场深度解析:耐腐蚀流体控制设备如何赋能化工行业安全升级?
安全
赛博守夜人1 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全
loong_XL2 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
晓德2 小时前
0、LLM大模型安全学习系列(启)
学习·安全
程序哥聊面试2 小时前
什么是 Sandbox?给 AI Agent 划一道安全边界
人工智能·安全
wuyk5552 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 31 章 休眠唤醒 WiFi 断连、时间同步、网络恢复机制
网络·物联网·php
沫璃染墨3 小时前
从零入门计算机网络系列(一):计算机网络初识——从网络发展史到TCP/IP协议》
linux·网络·网络协议·tcp/ip·计算机网络
王大傻09283 小时前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全