JAVA安全网JAVA安全网

生命不息,折腾不止。
--JAVA人自留地。

Fastjson2 远程代码执行漏洞预警&复现

转载自微信公众号,作者:长亭安全应急响应中心 | 原文:点击查看

Fastjson2 是阿里巴巴开源的 Java JSON 解析库重构升级版。凭借其高性能和简洁的 API,Fastjson2 在国内 Java 生态中占据主导地位,被广泛应用于企业后端服务、微服务网关、数据接口层等核心业务场景。

2026 年 7 月,长亭应急响应实验室安全研究员原创发现并上报了 Fastjson2 存在一个全 JDK 版本通杀的远程代码执行(RCE)漏洞。攻击者仅需控制 JSON 请求体,无需目标系统存在任何已知危险类,即可触发 RCE。目前官方已发布修复 Commit,建议受影响用户尽快应用修复补丁或实施缓解措施。


漏洞描述

漏洞成因

该漏洞源于 Fastjson2 在默认配置下(未启用 SupportAutoType 时),仍可能处理通用对象元素开头的 @type 属性。

其“AutoType 已禁用”校验分支会将输入字符串的增量 FNV-1a 哈希与默认接受的哈希值进行匹配。然而,在匹配命中后,代码并未确认实际文本是否等于预期的白名单类名。因此,攻击者可以针对任意前缀计算 FNV-1a Chosen-Prefix 碰撞,使 URL 形态的字符串进入应用的上下文类加载器,最终导致任意代码执行。

漏洞影响

攻击者可借此在服务器上执行任意代码,极易导致服务器被完全控制、核心数据泄露或业务系统全面沦陷。

  • 处置优先级:
  • 漏洞类型: 远程代码执行 (RCE)
  • 漏洞危害等级:
  • 触发方式: 网络远程
  • 权限认证要求: 无需权限
  • 系统配置要求: 默认配置即可触发
  • 用户交互要求: 无需交互
  • 利用成熟度: POC 尚未公开
  • 修复复杂度: 低(官方已发布修复补丁)

影响版本

  • Fastjson2 <= 2.0.62

漏洞复现

漏洞的核心原理可以通过直接拉取官方 PR 的代码进行比对分析,在此不再赘述。

以下是用于获取基本信息的 POC 演示代码

package poc;
import java.net.InetAddress;

public class Payload {
    public Payload() {
        String info = collect();
        try {
            java.io.FileWriter w = new java.io.FileWriter(
                    System.getProperty("java.io.tmpdir") + "/STRICT_RCE_PROOF.txt");
            w.write(info + "\n");
            w.close();
        } catch (Exception e) { 
            /* ignore, still throw below */ 
        }
        throw new RuntimeException("RCE-PROOF: " + info);
    }

    private static String collect() {
        StringBuilder sb = new StringBuilder();
        try {
            InetAddress addr = InetAddress.getLocalHost();
            sb.append("hostname=").append(addr.getHostName());
            sb.append(" ip=").append(addr.getHostAddress());
        } catch (Exception e) {
            sb.append("hostname=<unknown> ip=<unknown>");
        }
        sb.append(" user=").append(System.getProperty("user.name"));
        sb.append(" pid=").append(ProcessHandle.current().pid());
        sb.append(" os=").append(System.getProperty("os.name"))
          .append(' ').append(System.getProperty("os.arch"));
        sb.append(" javaVersion=").append(System.getProperty("java.version"));
        sb.append(" cwd=").append(System.getProperty("user.dir"));
        return sb.toString();
    }
}

FNV-1a 哈希碰撞效果:
哈希碰撞图示

漏洞执行验证:
验证结果图示


解决方案与缓解建议

官方已在 GitHub 更新了PR修复补丁,但是close了,具体代码变动可参考:
Fastjson2 PR #7695

目前我已向 Fastjson 官方提交了 Issue(Issue #7702)。

官方最新回答,修复版本将于 8 月 2 日发布。

在上周推修复fastjson1的漏洞,推动业务升级fastjson2,测试发现2.0.61,存在很多BUG,并且不兼容情况,推动升级的时候业务也不敢升级。作为甲方,还是推荐JVM禁用方式,在官方尚未发布正式的修复版本包(Release)之前,强烈建议受影响的项目采取以下临时缓解措施

临时缓解方案

1. 完全禁用 AutoType(推荐)
开启 SafeMode来完全禁用 AutoType 功能,从根本上杜绝此类风险。

  • 代码配置方式:
    ParserConfig.getGlobalInstance().setSafeMode(true);
    
  • fastjson1 ,fastjson2兼容JVM 启动参数配置方式(官方推荐):
    -Dfastjson.parser.safeMode=true
    
  • fastjson2 JVM 启动参数配置方式:
    -Dfastjson2.parser.safeMode=true
    

2026年07月29日17:42:39 更新,官方出了新的补丁包

  • fastjson2 可更新版本2.0.63
  • fastjson1 原本不维护也推出了更新包1.2.84

2. WAF 规则防护配置
在网关或 WAF 层面,拦截请求体中 JSON 数据的 Key 包含 @type 字段或者jar:filejar:http的恶意请求。

未经允许不得转载:JAVA安全网 » Fastjson2 远程代码执行漏洞预警&复现

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址