免责声明: 本仓库仅用于教育目的和道德披露。该漏洞已负责任地向供应商报告并已修补。请勿利用此信息在未经适当授权的情况下攻击系统。
在 WordPress 的 Tutor LMS 插件(版本 <= 3.9.5)中发现了不安全的直接对象引用(IDOR)/ 失效的访问控制漏洞。该缺陷允许拥有 Tutor 讲师角色的低权限用户执行未经授权的批量操作,例如更改其他讲师或管理员所拥有课程的状态,或将其永久删除。
通过拦截合法的后端请求并篡改课程 ID 参数,攻击者可以绕过预期的访问控制。在实际场景中,这允许恶意行为者在多讲师市场上破坏竞争课程,造成直接的业务中断、收入损失和声誉损害。
<= 3.9.53.9.6核心问题源于插件批量操作处理器中缺少对象级授权检查。
文件: tutor/classes/Course_List.php
函数: course_list_bulk_action()
1. 未经验证的对象标识符:
该函数直接接受来自 HTTP 请求的用户可控输入(bulk-action 和 bulk-ids)。虽然插件会验证用户是否具备管理课程的一般能力,但它完全没有验证 bulk-ids 数组中提供的特定 ID 是否属于该用户。
2. 未验证所有权即执行:
当触发状态更新路径(update_course_status())或删除路径(bulk_delete_course())时,代码会遍历攻击者提供的 ID。它使用 WHERE ID IN (...) 子句执行数据库操作(例如,更新 cp_posts.post_status),但未附加任何条件来确保 $post_author == $current_user_id。
由于该处理器未强制实施对象级授权,任何有权访问批量操作工作流的讲师都可以操纵任意的课程 ID。
以下步骤演示了已认证的 Tutor 讲师如何更改另一位讲师课程的状态。
course_id。(例如,ID:27)。/wp-admin/admin.php?page=tutor)。选择任意一个您自己拥有的课程,选择状态更改操作(例如,设置为“草稿”),然后点击“应用”。/wp-admin/admin-ajax.php 的出站 POST 请求。status 参数更改为 trash(或 pending、private)。id 参数从您的课程 ID 更改为受害者的课程 ID(27)。{"success":true}。受害者的课程已成功移至回收站,并从公开前端消失。