| Plugin Name | LearnPress |
|---|---|
| Type of Vulnerability | Unauthenticated Database Manipulation |
| CVE Number | CVE-2025-11372 |
| Urgency | Medium |
| CVE Publish Date | 2025-10-18 |
| Source URL | CVE-2025-11372 |
Urgent: LearnPress <= 4.2.9.3 — Broken Access Control (CVE-2025-11372) — What WordPress Site Owners and Admins Must Do Now
Author: Hong Kong Security Expert · Date: 2025-10-18 · Tags: WordPress, LearnPress, LMS security, Web Application Firewall, CVE-2025-11372
A concise, technically focused advisory and action plan from a Hong Kong-based security team. This write-up provides practical, time-sensitive guidance for site owners and administrators to assess exposure, apply emergency mitigations, and perform post-patch verification.
Overview
On 18 October 2025 a broken access control vulnerability affecting LearnPress (a widely used WordPress Learning Management System plugin) was disclosed and assigned CVE-2025-11372. The issue impacts LearnPress versions up to and including 4.2.9.3 and was fixed in version 4.2.9.4.
The vulnerability stems from missing authorization checks in one or more endpoints that allow unauthenticated requests to manipulate plugin database tables. In practical terms, an unauthenticated attacker — without being logged in — may be able to perform operations against LearnPress database tables (for example, creating, updating or deleting records used by the LMS). The severity is classed as Medium (CVSS 6.5). While not a direct remote code execution on its own, it is significant because it can corrupt data, alter content, or enable follow-on attacks.
What the vulnerability is — plain language
- Vulnerability type: Broken Access Control / Missing Authorization.
- Affected versions: LearnPress <= 4.2.9.3.
- Fixed in: LearnPress 4.2.9.4.
- CVE: CVE-2025-11372.
- Required privilege to exploit: Unauthenticated (no login required).
- Risk summary: An unauthenticated attacker can invoke a LearnPress endpoint that performs database table manipulation and lacks proper capability/nonce checks. This can allow insertion, modification or deletion of LMS-related data (courses, lessons, enrollments, meta entries, etc.) depending on which tables and operations are exposed.
Important: The precise impact depends on which database tables the endpoint touches and how the site is configured. Exploitation could lead to data loss, content tampering, enrollment manipulation, or configuration changes that weaken access control. It can also be chained with other issues to increase impact.
Why LMS plugins are high-value targets
Learning Management Systems host course content, student records, grades, and sometimes payment information. Attackers target LMS plugins for several reasons:
- Access to personally identifiable information (PII) such as student names and emails.
- Manipulation of course content to insert malicious material or links.
- Tampering with enrollments to grant unauthorized access to paid content.
- Creating persistence (backdoors) via posts, pages, or user accounts.
- Leveraging LMS workflows for phishing or credential harvesting.
Because this LearnPress bug permits unauthenticated database manipulation, the attack surface includes critical LMS data and operations. Treat affected sites as at-risk until patched and verified.
How an attacker might exploit CVE-2025-11372 (high-level scenarios)
- Scenario A — Data manipulation: Insert or delete rows from LearnPress tables (e.g., course records or lesson metadata), leading to broken courses or corrupted reports.
- Scenario B — Enrollment escalation: Add enrollments to bypass paywalls or disrupt business logic.
- Scenario C — Stored content injection: Write content fields containing malicious HTML/JS that later execute in the browser of instructors or students (stored XSS pivot).
- Scenario D — Chaining with other flaws: Alter plugin settings to expose debug data or create easier paths for file upload or privilege escalation.
Even if the flaw cannot directly create admin users or write PHP files, the consequences to LMS integrity and trust can be severe.
Immediate actions (what to do in the next 30–120 minutes)
-
Confirm plugin version
Check LearnPress version in WP Admin: Dashboard → Plugins → Installed Plugins → LearnPress. Or via WP-CLI:
wp plugin list --status=active | grep learnpress. You can also inspectwp-content/plugins/learnpress/readme.txtor plugin headers. -
If running vulnerable version (≤ 4.2.9.3) — update now
Update LearnPress immediately to 4.2.9.4 or later. Use the WordPress admin updater or WP-CLI:
wp plugin update learnpress. If you operate a managed environment, schedule the update without delay. -
If you cannot update immediately
- Put the site into maintenance mode to prevent user activity during remediation.
- Temporarily deactivate the LearnPress plugin if tolerated:
wp plugin deactivate learnpress. This will break LMS functionality but stops the attack vector. - Apply host-level or webserver restrictions to block access to the vulnerable endpoint(s) (examples below).
-
Check logs for suspicious requests
Search for anomalous requests to LearnPress endpoints, AJAX actions, or unusual query parameters. Look for spikes in POST requests to
admin-ajax.phpor direct calls under/wp-content/plugins/learnpress/. -
Scan for indicators of compromise (IOCs)
Run malware scans, review uploads and
wp-contentfor new files, and validate database content (queries below).
Detection: Indicators of Compromise (IOCs) and queries
Adjust SQL queries to your DB prefix (replace wp_ where applicable). LearnPress table names commonly use wp_learnpress_*, but implementations vary.
- Check for new admin users:
SELECT ID, user_login, user_email, user_registered FROM wp_users WHERE user_status = 0 ORDER BY user_registered DESC LIMIT 50;
- Recent or modified LearnPress course posts (adapt table names as needed):
SELECT * FROM wp_posts WHERE post_type IN ('lp_course', 'lesson', 'lp_quiz') ORDER BY post_modified DESC LIMIT 50; - Search for injected script tags:
SELECT ID, post_title, post_modified FROM wp_posts WHERE post_content LIKE '%