| Reporter | Title | Published | Views | Family All 12 |
|---|---|---|---|---|
| CVE-2026-1375 | 3 Feb 202607:31 | – | attackerkb | |
| CVE-2026-1375 | 3 Feb 202608:22 | – | circl | |
| WordPress plugin Tutor LMS 安全漏洞 | 3 Feb 202600:00 | – | cnnvd | |
| CVE-2026-1375 | 3 Feb 202607:31 | – | cve | |
| CVE-2026-1375 Tutor LMS <= 3.9.5 - Insecure Direct Object Reference to Authenticated (Instructor+) Arbitrary Course Modification and Deletion | 3 Feb 202607:31 | – | cvelist | |
| EUVD-2026-5274 | 3 Feb 202607:31 | – | euvd | |
| CVE-2026-1375 | 3 Feb 202608:16 | – | nvd | |
| WordPress Tutor LMS plugin <= 3.9.5 - Insecure Direct Object Reference to Authenticated (Instructor+) Arbitrary Course Modification and Deletion vulnerability | 3 Feb 202622:39 | – | patchstack | |
| PT-2026-6043 | 3 Feb 202600:00 | – | ptsecurity | |
| CVE-2026-1375 | 4 Feb 202613:20 | – | redhatcve |
# CVE-2026-1375: Authenticated IDOR / Broken Access Control in Tutor LMS Plugin
> **Disclaimer:** This repository is created for **educational purposes and ethical disclosure only**. The vulnerability has been responsibly reported to the vendor and patched. Do not use this information to exploit systems without proper authorization.
## Summary
**Insecure Direct Object Reference (IDOR) / Broken Access Control** vulnerability was discovered in the **Tutor LMS** plugin for WordPress (versions <= 3.9.5). This flaw allows a low-privileged user with the **Tutor Instructor** role to perform unauthorized bulk actions, such as changing the publication status or permanently deleting courses owned by other instructors or administrators.
By intercepting a legitimate backend request and tampering with the course ID parameter, an attacker can bypass intended access controls. In a real-world scenario, this allows malicious actors to sabotage competitor courses on a multi-instructor marketplace, causing direct business disruption, revenue loss, and reputational damage.
## Vulnerability Overview
* **CVE ID:** CVE-2026-1375
* **Product:** Tutor LMS (WordPress Plugin)
* **Affected Versions:** `<= 3.9.5`
* **Patched Versions:** `3.9.6`
* **Vulnerability Type:** Insecure Direct Object Reference (IDOR) / Broken Access Control (CWE-284)
* **Required Privileges:** Authenticated (Tutor Instructor)
## Root Cause
The core issue stems from **missing object-level authorization checks** within the plugin's bulk action handler.
**File:** `tutor/classes/Course_List.php`
**Function:** `course_list_bulk_action()`
**1. Unvalidated Object Identifiers:**
The function accepts user-controlled inputs (`bulk-action` and `bulk-ids`) directly from the HTTP request. While the plugin verifies that the user holds a general capability to manage courses, it entirely fails to verify per-course ownership for the specific IDs supplied in the `bulk-ids` array.
**2. Execution Without Ownership Verification:**
When the status update path (`update_course_status()`) or the deletion path (`bulk_delete_course()`) is triggered, the code iterates over the attacker-supplied IDs. It executes database operations (e.g., updating `cp_posts.post_status`) using a `WHERE ID IN (...)` clause without appending a condition to ensure `$post_author == $current_user_id`.
Because the handler does not enforce object-level authorization, any instructor with access to the bulk action workflow can manipulate arbitrary course IDs.
## Business Impact
* **Business Disruption:** Victim courses can be taken offline (moved to trash, draft, or private) without consent, removing them from public listings.
* **Revenue Loss:** On multi-instructor platforms or marketplaces, hiding a competitor's course directly impacts their enrollments and income.
* **Data Destruction:** If the bulk delete feature is accessible, an attacker could permanently erase course content that does not belong to them.
## Proof of Concept (PoC)
The following steps demonstrate how an authenticated Tutor Instructor can change the status of another instructor's course.
### Manual Exploitation Steps
1. **Prerequisites:**
* Log in to the WordPress dashboard as a **Tutor Instructor** (Attacker).
* Identify the target `course_id` belonging to another instructor (Victim). (e.g., ID: 27).
2. **Trigger Action:** Navigate to the Tutor LMS course list (`/wp-admin/admin.php?page=tutor`). Select any course you own, choose a status change action (e.g., set to "draft"), and click "Apply".
3. **Intercept Request:** Use a proxy tool like Burp Suite to intercept the outbound `POST` request to `/wp-admin/admin-ajax.php`.
4. **Payload Modification:**
* Change the `status` parameter to `trash` (or `pending`, `private`).
* Change the `id` parameter from your course ID to the Victim's course ID (`27`).
5. **Execution:** Forward the modified request.
6. **Result:** The server responds with `{"success":true}`. The victim's course is successfully moved to the trash and disappears from the public frontend.
## Timeline
* **Date (2026-01-23):** Reported to Wordfence.
* **Date (2026-02-03):** Vulnerability patched / Public disclosure.
## References & Credits
* [Wordfence Vulnerability Database](https://www.wordfence.com/threat-intel/vulnerabilities/id/4e95b32b-c050-41eb-8fce-461257420eb6)
* [CVE-2026-1375 on NVD](https://www.cve.org/CVERecord?id=CVE-2026-1375)
* [MyRewards Plugin on WordPress.org](https://wordpress.org/plugins/tutor/)Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation