CVE-2026-3358
Received Received - Intake
Unauthorized Enrollment Vulnerability in Tutor LMS WordPress Plugin

Publication date: 2026-04-11

Last updated on: 2026-04-11

Assigner: Wordfence

Description
The Tutor LMS – eLearning and online course solution plugin for WordPress is vulnerable to unauthorized private course enrollment in all versions up to, and including, 3.9.7. This is due to missing post_status validation in the `enroll_now()` and `course_enrollment()` functions. Both enrollment endpoints verify the nonce, user authentication, and whether the course is purchasable, but fail to check if the course has a `private` post_status. This makes it possible for authenticated attackers with Subscriber-level access or above to enroll in private courses by sending a crafted POST request with the target course ID. The enrollment record is created in the database and the private course title and enrollment status are exposed in the subscriber's dashboard, though WordPress core access control prevents the subscriber from viewing the actual course content (returns 404). Enrollment in private courses should be restricted to users with the `read_private_posts` capability.
CVSS Scores
EPSS Scores
Probability:
Percentile:
Meta Information
Published
2026-04-11
Last Modified
2026-04-11
Generated
2026-05-07
AI Q&A
2026-04-11
EPSS Evaluated
2026-05-05
NVD
Affected Vendors & Products
Showing 1 associated CPE
Vendor Product Version / Range
tutor_lms tutor_lms to 3.9.7 (inc)
Helpful Resources
Exploitability
CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-862 The product does not perform an authorization check when an actor attempts to access a resource or perform an action.
Attack-Flow Graph
AI Powered Q&A
Can you explain this vulnerability to me?

The vulnerability exists in the Tutor LMS WordPress plugin up to version 3.9.7, where unauthorized private course enrollment is possible.

This happens because the functions responsible for enrollment (`enroll_now()` and `course_enrollment()`) do not validate the course's post_status to check if it is private.

Although the plugin verifies nonce, user authentication, and whether the course is purchasable, it fails to restrict enrollment to users with the proper capability to access private courses.

As a result, authenticated users with Subscriber-level access or higher can enroll in private courses by sending a specially crafted POST request with the course ID.

While the actual course content remains inaccessible (returns 404 due to WordPress core access control), the enrollment record and private course title become visible on the subscriber's dashboard.


How does this vulnerability affect compliance with common standards and regulations (like GDPR, HIPAA)?:

This vulnerability allows authenticated users with Subscriber-level access or above to enroll in private courses without proper authorization due to missing validation of the course's private status.

Although the actual course content remains protected by WordPress core access controls (returning 404 errors), the exposure of private course titles and enrollment status in the subscriber's dashboard could lead to unauthorized disclosure of sensitive information.

Such unauthorized exposure of private data may impact compliance with data protection regulations like GDPR or HIPAA, which require strict control over access to personal or sensitive information.


How can this vulnerability impact me? :

This vulnerability allows unauthorized users with Subscriber-level access or above to enroll in private courses without proper permission.

Although they cannot view the actual course content due to WordPress core restrictions, they gain visibility of private course titles and enrollment status.

This exposure could lead to information disclosure about private courses and unauthorized enrollment records in the database.


How can this vulnerability be detected on my network or system? Can you suggest some commands?

This vulnerability can be detected by monitoring for unauthorized POST requests to the enrollment endpoints of the Tutor LMS plugin that include course IDs of private courses.

Specifically, detection involves checking for POST requests to the functions `enroll_now()` and `course_enrollment()` where the user is authenticated with Subscriber-level access or above, but is enrolling in courses marked with a private post_status.

You can use network monitoring tools or web server logs to identify such suspicious POST requests.

  • Use command-line tools like `grep` on web server logs to find POST requests to enrollment endpoints with course IDs, for example: `grep 'POST.*enroll_now' /var/log/apache2/access.log`
  • Use tools like `curl` or `httpie` to simulate POST requests and verify if enrollment in private courses is possible without proper authorization.

What immediate steps should I take to mitigate this vulnerability?

The immediate mitigation step is to update the Tutor LMS plugin to a version later than 3.9.7 where this vulnerability is fixed.

If an update is not immediately possible, restrict access to the enrollment endpoints by implementing additional access controls that verify the `post_status` of courses before allowing enrollment.

Additionally, monitor and block suspicious POST requests attempting to enroll users in private courses.

Ensure that only users with the `read_private_posts` capability can enroll in private courses, as intended by the plugin design.


Ask Our AI Assistant
Need more information? Ask your question to get an AI reply (Powered by our expertise)
0/70
EPSS Chart