Fox LMS `createOrder` Unauthenticated Privilege Escalation to Administrator (CVE-2025-14156)
by Nxploited (Khaled Alenazi) · 2026-07-06
- Severity
- Critical
- CVE
- CVE-2025-14156
- Category
- web
- Affected product
- Fox LMS (WordPress LMS plugin)
- Affected versions
- 1.0.4.7 through 1.0.5.1
- Disclosed
- 2026-07-06
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-06 |
| Last Updated | 2026-07-06 |
| Author / Researcher | Nxploited (Khaled Alenazi) |
| CVE / Advisory | CVE-2025-14156 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.8 (per NVD) |
| Status | Weaponized |
| Tags | wordpress, fox-lms, rest-api, privilege-escalation, role-injection, unauthenticated, python, cwe-269 |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Fox LMS (WordPress LMS plugin) |
| Versions Affected | 1.0.4.7 through 1.0.5.1 |
| Language / Platform | Python 3 exploit targeting a WordPress REST API endpoint |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
Fox LMS exposes a REST API endpoint, /wp-json/fox-lms/v1/payments/create-order, intended to register a new user as part of a course-purchase flow. The endpoint accepts a role field in the JSON body but does not validate or restrict it to safe values (e.g. subscriber/customer) — it passes the attacker-supplied role straight through to WordPress’s user-creation logic. An unauthenticated attacker can simply set "role": "administrator" in the request body to create a brand-new WordPress administrator account, receiving a valid session cookie in the response.
Vulnerability Details
Root Cause
The plugin’s create-order REST handler trusts a client-supplied role parameter when creating the account. The PoC demonstrates the exact payload shape that triggers it:
| |
Because the endpoint neither ignores nor whitelists the role field before calling wp_insert_user() (or equivalent), any value — including administrator — is accepted verbatim.
Attack Vector
- Attacker sends an unauthenticated
POST /wp-json/fox-lms/v1/payments/create-orderrequest with a JSON body containing arbitraryusername/password/emailand"role": "administrator". - The endpoint creates the account with the requested role and, on success, returns session cookies (
wordpress_logged_in_*) in the response. - Attacker now holds full administrator credentials and an active authenticated session for the target WordPress site.
Impact
Unauthenticated creation of a fully privileged administrator account, resulting in complete WordPress site compromise.
Environment / Lab Setup
Target: WordPress install with Fox LMS plugin 1.0.4.7-1.0.5.1 active,
REST API enabled (default)
Attacker: Python 3, `pip install requests`
Proof of Concept
PoC Script
See
CVE-2025-14156.pyin this folder.
| |
Detection & Indicators of Compromise
POST /wp-json/fox-lms/v1/payments/create-order HTTP/1.1
Content-Type: application/json
{"username":"...","email":"...","password":"...","role":"administrator","courseId":1}
Signs of compromise:
- New WordPress
administratorusers created via thefox-lms/v1/payments/create-orderREST endpoint rather than/wp-admin/user-new.php - REST API requests to
create-ordercontaining arolefield with a value other thansubscriber/customer - Unexplained admin accounts with generic/attacker-style usernames (e.g.
nxploited) appearing in the WordPress users list
Remediation
| Action | Detail |
|---|---|
| Primary fix | Update Fox LMS beyond 1.0.5.1 to a version that ignores or strictly validates the role parameter on create-order (hardcode subscriber/customer server-side) |
| Interim mitigation | Block or rate-limit unauthenticated access to /wp-json/fox-lms/v1/payments/create-order; audit existing users for unexpected administrator accounts; add a WAF rule rejecting "role":"administrator" in requests to this endpoint |
References
Notes
Mirrored from https://github.com/Nxploited/CVE-2025-14156 on 2026-07-06. Templated Nxploited branding/disclaimer, but the exploit logic (direct role-injection POST to the createOrder REST endpoint) is functional and specific to this CVE.
| |