Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify LearnPress site with 'No Required Enroll' course
-
DeliveryCall public load_content_via_ajax endpoint
-
ExploitPass open course_id for auth, paid item_id for data
-
ExecutionServer skips lesson-to-course check
-
ImpactDownload paid-course material files and URLs
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Exploitation requires that at least one course on the target site has 'No Required Enroll' enabled and owns at least one material file - this 'No Required Enroll' course provides the valid course_id used to pass the authorization check, while the attacker independently supplies the item_id of a lesson in a restricted/paid course. The vulnerable path is the CourseMaterialTemplate::render_material_items() callback reached via the public lp-ajax-handle load_content_via_ajax action, which is explicitly in LearnPress's AbstractAjax no-nonce allowlist and performs no capability check. Limiting factors: impact is read-only confidentiality (material file paths and external URLs for lessons in paid/enrollment-required courses); if no course has 'No Required Enroll' enabled with an associated material file, the authorization-side identifier cannot be satisfied and the attack does not work. No authentication or user interaction is required. |
| Impact | This is a genuine, easily-triggered confidentiality risk despite the absence of exploitation telemetry. The CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (7.5 High) is internally consistent with the description: a network-reachable, unauthenticated, no-user-interaction IDOR on a public AJAX endpoint that the plugin itself places in the no-nonce allowlist. No EPSS score, CISA KEV entry, or public POC was provided, so there is no evidence of active or automated exploitation (no public exploit identified at time of analysis). However, the low barrier to entry (PR:N/AC:L/UI:N) plus the large install base of LearnPress means this is a realistic priority for sites that sell or gate course content, not a high-CVSS-but-low-real-risk paper flaw. The impact is bounded to confidentiality (C:H, I:N/A:N) - attackers read/download material files but cannot modify or deny service. The only conflicting signal is the 'Authentication Bypass' tag, which misdescribes the flaw: the CWE (639) and description confirm this is an authorization/IDOR issue where auth is simply absent by design on the endpoint, not a bypass of an authentication mechanism. The effective real-world risk is gated by a configuration precondition (see exploitation_conditions), which tempers the raw 7.5. |
| Exploit ScenarioDerived | An unauthenticated attacker locates a WordPress site running LearnPress where at least one course has 'No Required Enroll' enabled and owns a material file. They send a crafted request to the public lp-ajax-handle (load_content_via_ajax) endpoint passing the unrestricted course_id for authorization but an arbitrary item_id pointing at a lesson in a paid/enrollment-required course, and the render_material_items() handler returns that lesson's material file paths and external URLs. No POC is published, but the attack requires only standard HTTP requests and simple parameter enumeration. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 01, 2026
Unauthenticated attackers can read and download course-material files - including uploaded file paths and external URLs - belonging to lessons in paid or enrollment-required LearnPress courses by exploiting an insecure direct object reference in the plugin's CourseMaterialTemplate::render_material_items() handler (CVE-2026-93882, CVSS 7.5, AV:N/AC:L/PR:N/UI:N). The handler validates authorization against one attacker-supplied identifier (course_id) but fetches material rows using a second, independently attacker-supplied identifier (item_id), with no check that the lesson actually belongs to the authorized course; the call is reachable through the public lp-ajax-handle (load_content_via_ajax) action, which sits on the AbstractAjax no-nonce allowlist and performs no capability check. Exploitation is conditional: at least one course on the target site must have 'No Required Enroll' enabled and own at least one material file, so that a valid course_id exists to satisfy the authorization branch while item_id is pointed at a restricted lesson. Impact is read-only confidentiality loss; no public exploit identified at time of analysis.
RemediationAI
No vendor-released patch version is identified in the available data for CVE-2026-93882; the reported vulnerable range extends through LearnPress 4.4.8, and administrators should treat the Wordfence advisory (https://www.wordfence.com/threat-intel/vulnerabilities/id/1f35f646-1bd6-4785-bdc2-c815644b2b2d?source=cve) as the authoritative tracking point for a patched release and upgrade as soon as one is published. Because the attack requires a course with 'No Required Enroll' enabled to serve as the valid authorization-side course_id, the most direct compensating control is to remove or disable that enrollment exemption on every course that owns material files - with the trade-off that this also blocks legitimate public preview access to those materials for anonymous visitors, effectively forcing enrollment elsewhere. A second option is to block or filter requests to wp-admin/admin-ajax.php carrying action=load_content_via_ajax at the WAF or reverse-proxy layer, or to dequeue/unhook the LoadContentViaAjax handler; the trade-off is that this disables the AJAX-driven course material loading feature site-wide, including for legitimate enrolled students, so it should be paired with a user-facing fallback or applied only temporarily until a vendor fix lands. Site operators who cannot change configuration should also consider temporarily restricting access to course material files at the web-server or storage layer and reviewing access logs for repeated admin-ajax.php requests with mismatched course_id and item_id parameters, which is the signature of exploitation of this IDOR.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
LearnPress is a WordPress LMS plugin whose AJAX layer routes front-end course interactions through wp-admin/admin-ajax.php actions inherited from an AbstractAjax base class. In the affected code path, the abstract handler maintains an explicit no-nonce allowlist - the source reference at inc/Ajax/AbstractAjax.php#L31 - which exempts certain actions from WordPress nonce verification. The load_content_via_ajax action is dispatched by inc/Ajax/LoadContentViaAjax.php#L25 and ultimately invokes CourseMaterialTemplate::render_material_items() (inc/TemplateHooks/Course/CourseMaterialTemplate.php#L113 and #L143), which queries material records through inc/Databases/class-lp-material-db.php#L92. The defect is a classic CWE-639 authorization bypass through user-controlled key: the function resolves permission using the caller-supplied course_id but then retrieves the material rows using a separate, caller-supplied item_id, so the two identifiers are never bound together and no ownership check ties the lesson to the course that was authorized. Because the callback carries no capability check and no nonce, the only trust anchor is the course_id, and any course on the site exposed with 'No Required Enroll' supplies a legitimate value for that anchor. The CPE cpe:2.3:a:thimpress:learnpress_-_wordpress_lms_plugin_for_create_and_sell_online_courses:*:*:*:*:*:*:*:* is wildcarded for version, consistent with a vulnerable range rather than a single release, and the cited source lines are drawn from the 4.4.7 plugin tag. The 7.5 score reflects high confidentiality impact with no integrity or availability effect, no privileges required, and no user interaction.
Know when Learnpress Wordpress Lms Plugin For Create And Sell Online Courses gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Unauthenticated network AJAX endpoint with no nonce or capability check (PR:N/UI:N/AC:L); read-only disclosure of gated material files gives C:H with no integrity or availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The LearnPress - WordPress LMS Plugin for Create and Sell Online Courses plugin for WordPress is vulnerable to Insecure Direct Object Reference in versions up to, and including, 4.4.8 via the CourseMaterialTemplate::render_material_items() callback exposed on the public lp-ajax-handle (load_content_via_ajax) endpoint. The endpoint is explicitly listed in the AbstractAjax no-nonce allowlist and performs no capability check, and the render_material_items() handler decides authorization against one attacker-supplied identifier (course_id) while fetching the returned material rows via a second, independently attacker-supplied identifier (item_id) with no check that the lesson belongs to the authorized course. This makes it possible for unauthenticated attackers to read and download course-material files (uploaded and external file paths/URLs) belonging to lessons in paid or enrollment-required courses, provided any single course on the site has 'No Required Enroll' enabled and owns at least one material file.
Executive ViewAI
A high-severity flaw in the LearnPress WordPress plugin lets anyone on the internet - with no login and no user interaction - retrieve file paths and external links for materials attached to paid or enrollment-restricted courses, potentially handing competitors and non-customers the very content students pay for. Because the vulnerable code is reachable through a public, nonce-free AJAX endpoint, the exposure scales with any automated scanning and there is no vendor fix to deploy today. Leadership should care because leaked premium course material directly erodes the value proposition for paying learners, damages instructor and partner trust, and creates copyright and contractual exposure for the organization hosting the site.
No vendor-released patch identified at time of analysis. Interim mitigations: deactivate the LearnPress plugin on sites hosting paid or enrollment-gated courses; block the public lp-ajax-handle (load_content_via_ajax) route at the WAF, reverse proxy, or web server; remove the affected action from the AbstractAjax no-nonce allowlist so the handler requires a valid nonce and capability; disable courses configured with 'No Required Enroll' that also carry material files; and monitor web logs for requests supplying mismatched course_id and item_id values to the material-rendering handler.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Unauthenticated PHP object injection in the LearnPress WordPress LMS plugin through version 4.4.10 allows attackers to s
Unauthenticated data deletion in LearnPress WordPress LMS plugin (versions ≤4.3.2.8) allows remote attackers to delete a
Sensitive information exposure in the LearnPress LMS plugin for WordPress (versions up to and including 4.4.1) lets unau
Stored cross-site scripting in the LearnPress WordPress LMS plugin (all versions up to and including 4.4.10) lets attack
Course enrollment data exposure in LearnPress WordPress LMS plugin (all versions through 4.3.9.1) enables authenticated
An authorization bypass in the LearnPress WordPress LMS plugin (all versions through 4.4.10) lets any authenticated user
Stored cross-site scripting in LearnPress - WordPress LMS Plugin versions through 4.3.9.1 allows authenticated contribut
Stored Cross-Site Scripting in the LearnPress WordPress LMS plugin (versions up to and including 4.4.0) allows authentic
Stored Cross-Site Scripting in LearnPress WordPress LMS Plugin up to version 4.3.3 allows authenticated contributors to
LearnPress WordPress LMS plugin versions through 4.4.7 reflect unsanitized input from the 'orderby' parameter into the D
Sensitive information exposure in LearnPress WordPress LMS Plugin (all versions through 4.3.6) allows unauthenticated re
SQL injection in the LearnPress WordPress LMS plugin (versions ≤ 4.4.4) allows authenticated administrators to extract a
EUVD-2026-90544
GHSA-hgjr-485v-48f2
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB