Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-11988

CVE-2026-11988: LearnPress WordPress Plugin IDOR Vulnerability

CVE-2026-11988 is an Insecure Direct Object Reference flaw in LearnPress WordPress LMS Plugin allowing authenticated users to access instructor and admin course data. This article covers technical details, affected versions, and mitigation.

Published:

CVE-2026-11988 Overview

CVE-2026-11988 affects the LearnPress WordPress LMS Plugin for Create and Sell Online Courses. The plugin fails to validate a user-controlled userId parameter in its REST API, exposing an Insecure Direct Object Reference (IDOR) [CWE-639]. Authenticated attackers with subscriber-level access or above can query the course enrollment progress and completion data belonging to any instructor or administrator on the site. The guard correctly blocks cross-subscriber access, so exploitation is limited to victim accounts holding the LP_TEACHER_ROLE or administrator role. All plugin versions up to and including 4.3.9.1 are affected.

Critical Impact

Any authenticated subscriber can enumerate course progress and completion data belonging to instructors and administrators, leaking learner activity and internal course participation records.

Affected Products

  • LearnPress – WordPress LMS Plugin for Create and Sell Online Courses (versions up to and including 4.3.9.1)
  • WordPress sites using the vulnerable REST endpoint class-lp-rest-lazy-load-controller.php
  • Fixed in LearnPress 4.4.0

Discovery Timeline

  • 2026-07-01 - CVE-2026-11988 published to NVD
  • 2026-07-01 - Last updated in NVD database

Technical Details for CVE-2026-11988

Vulnerability Analysis

The vulnerability resides in the LearnPress REST API lazy-load controller. The endpoint accepts a userId parameter from the request and passes it directly into the user lookup routine without verifying that the requesting user is authorized to view data for the referenced account. Because the parameter is a direct object reference, attackers can substitute any numeric user ID to retrieve enrollment and progress records.

The plugin does enforce one guard: it blocks a subscriber from reading another subscriber's data. However, the check does not extend upward. Requests targeting users with the LP_TEACHER_ROLE or administrator role return the requested data, exposing enrollment progress and course completion records for privileged accounts.

Root Cause

The root cause is missing authorization on a user-controlled key, classified as [CWE-639] Authorization Bypass Through User-Controlled Key. The controller code at class-lp-rest-lazy-load-controller.php lines 118 and 137, along with the user helper at abstract-lp-user.php line 680, resolves the target user from the request payload without validating that the caller has permission to read that user's learning data.

Attack Vector

An attacker authenticates to the WordPress site with any subscriber-level account, including self-registered users on sites that allow open registration. The attacker then issues a request to the vulnerable LearnPress REST endpoint, iterating the userId parameter across candidate IDs. When the target ID belongs to an instructor or administrator, the API returns course enrollment progress and completion records for that user. No user interaction is required and the network attack path is remote.

Exploitation code is not required beyond a standard authenticated HTTP request against the LearnPress lazy-load REST route with a modified userId value. See the Wordfence Vulnerability Intelligence advisory and the WordPress LearnPress Controller Code for the affected code path.

Detection Methods for CVE-2026-11988

Indicators of Compromise

  • Requests to the LearnPress REST endpoints under /wp-json/learnpress/v1/frontend/ containing a userId parameter that does not match the authenticated session user.
  • Sequential or enumerative userId values in REST API logs originating from a single subscriber-level account.
  • Elevated request volume from newly registered subscriber accounts targeting the lazy-load controller.

Detection Strategies

  • Compare the authenticated user ID in the WordPress session with the userId parameter submitted to the LearnPress REST API and flag mismatches.
  • Alert when subscriber-level accounts successfully query enrollment data for user IDs mapped to LP_TEACHER_ROLE or administrator roles.
  • Baseline normal LearnPress API usage per role and flag deviations such as broad user ID enumeration.

Monitoring Recommendations

  • Enable WordPress REST API request logging and forward web server access logs to a centralized analytics platform for correlation.
  • Monitor authentication events for spikes in new subscriber registrations followed by REST API calls to LearnPress endpoints.
  • Review LearnPress plugin logs for repeated lookups of high-privilege user IDs.

How to Mitigate CVE-2026-11988

Immediate Actions Required

  • Upgrade the LearnPress plugin to version 4.4.0 or later on all affected WordPress sites.
  • Audit REST API logs for prior enumeration of instructor or administrator userId values by subscriber accounts.
  • Review self-registration settings and disable open subscriber registration where it is not required.

Patch Information

The vendor addressed the IDOR in LearnPress 4.4.0. The code changes between 4.3.9.1 and 4.4.0 are documented in the WordPress LearnPress Version Change diff. Administrators should apply the update through the WordPress plugin manager and verify the installed version reports 4.4.0 or higher.

Workarounds

  • Restrict access to the /wp-json/learnpress/ REST namespace at the web application firewall to authenticated instructors and administrators until patching is complete.
  • Temporarily disable the LearnPress plugin on sites where enrollment data confidentiality is required and patching cannot be applied immediately.
  • Remove or downgrade unnecessary subscriber accounts and disable public user registration during the exposure window.
bash
# Configuration example
# Update LearnPress via WP-CLI on affected WordPress hosts
wp plugin update learnpress --version=4.4.0
wp plugin get learnpress --field=version

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.