Skip to main content

LearnPress CVE-2026-105397

| EUVDEUVD-2026-92444 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-05 VulnCheck GHSA-hrc8-hp2q-rr9f
5.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain or compromise Instructor-role account
  2. Delivery
    Submit quiz question via update_question AJAX
  3. Exploit
    Store XSS payload in hint/explanation field
  4. Execution
    Student opens affected quiz
  5. Persist
    Script executes in student session
  6. Impact
    Hijack session / act as student

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an authenticated account with the LearnPress Instructor role (PR:L) able to reach the update_question AJAX handler, and it requires a victim student to actually open/take the affected quiz so the stored payload in the question hint or explanation field renders (UI:P). It is limited to deployments of the LearnPress plugin at or below version 4.4.9.1 where Instructor-level accounts exist and are not fully trusted; it does not yield direct compromise of the server or the vulnerable WordPress system itself, only script execution in viewing students' browser sessions. There is no unauthenticated path - the attacker must already hold or seize instructor privileges.

Impact

This is a genuine but moderate-severity issue, not a drop-everything priority. The only CVSS data provided is a CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N, base 5.1): network vector with low complexity, but it requires existing privileges (PR:L, an Instructor account) and passive user interaction (UI:P, a student must open the quiz). Vulnerable-system impact is nil (VC/VI/VA:N); the harm is entirely on the subsequent system - the student's browser session - reflected as SC:L/SI:L. No EPSS score, no CISA KEV listing, and no public POC were supplied, so by the precision rules this is 'no public exploit identified at time of analysis.' There is no signal conflict: a low-ish severity, an authenticated-attacker precondition, and the absence of exploitation telemetry all point the same direction - a real, vendor-confirmed stored XSS that is realistically abused only inside a course by a malicious or compromised instructor, not mass-exploited across the internet. The constraining factor is trust: whoever holds Instructor rights already has a privileged, semi-trusted relationship with the site, which bounds the attacker population.

Exploit ScenarioDerived

A user holding the WordPress Instructor role (or an attacker who has compromised such an account) submits a quiz question through the update_question AJAX handler with a malicious script embedded in the question's hint or explanation field, which LearnPress stored without sanitization. When any student subsequently takes that quiz, the stored payload executes in the student's authenticated browser session, enabling session/cookie theft or actions on the student's behalf. No public exploit code was identified, but the attack requires only standard instructor functionality and is straightforward given low attack complexity.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 05, 2026

Stored cross-site scripting in the LearnPress WordPress plugin through version 4.4.9.1 allows authenticated users holding the Instructor role to inject JavaScript into quiz question hint and explanation fields through the update_question AJAX handler, where the payload is persisted and later rendered in the browser session of every student who opens the affected quiz. The root cause is missing sanitization (CWE-79) of those two fields before storage and output, which the upstream commit addresses with Template::sanitize_html_content. Exploitation is limited: it requires an Instructor-level account plus a student actually viewing the quiz, yields only script execution in the student's browser (no server compromise, no privilege escalation), and no public exploit code was identified at time of analysis; this is a genuine but moderate-severity issue rather than a drop-everything priority.

RemediationAI

Upgrade LearnPress to a version newer than 4.4.9.1 obtained from the WordPress plugin directory at https://wordpress.org/plugins/learnpress/; the vendor confirms a patch is available, and the upstream fix is the sanitization commit https://github.com/LearnPress/learnpress/commit/9db279c0d9fd3993430bb9af158658282e9bcee1, so note that a released patched version number was not independently confirmed and administrators should verify the installed tag after updating. If immediate upgrade is not possible, reduce exposure by restricting which accounts hold the LearnPress Instructor role and revoking it from untrusted or self-registered users (trade-off: those users can no longer create or edit quizzes), auditing and cleaning existing question hint and explanation meta values for script or event-handler content (trade-off: manual content review and possible loss of legitimate formatting), and applying a WAF rule that rejects script tags and HTML event attributes in the update_question AJAX request body (trade-off: can be bypassed by encoding or obfuscation and may break legitimate instructor HTML). Deploying a Content-Security-Policy that blocks inline script execution provides defense in depth against the stored payloads but can break plugin interface elements, and students remain at risk of session-scoped script execution for any student who opens an already-poisoned quiz, so remediation of the stored content is required in addition to patching. Because the flaw only affects the plugin and requires an Instructor account plus a student viewing the quiz, prioritization can follow a normal moderate-severity patch cycle rather than emergency response.

Affected VersionsENISA

LearnPress 0 ≤4.4.9.1

Affected Packages

euvd learnpress no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

LearnPress is a WordPress LMS plugin tracked as cpe:2.3:a:thimpress:learnpress, and its quiz questions are stored as WordPress posts with supporting metadata such as the hint and explanation text kept in post meta. The vulnerable path is the authenticated AJAX action update_question in inc/Ajax/EditQuestionAjax.php, plus the data-access layer in inc/Models/Question/QuestionPostModel.php and inc/question/class-lp-question.php, which retrieve that meta and pass it through do_shortcode() and the learn-press/question/hint and learn-press/question/explanation filters without escaping. The result is classic CWE-79 stored cross-site scripting: an Instructor submits markup containing script or event-handler payloads, the value is saved verbatim, and each student's browser executes it when the quiz front-end component renders the hint or explanation. The vendor fix (commit 9db279c0d9fd3993430bb9af158658282e9bcee1) applies Template::sanitize_html_content at both the input point in update_question and the output points in QuestionPostModel and LP_Question, and also hardens surrounding type handling such as casting question_mark to float and sanitizing question_type. The front-end rendering is handled by the quiz question component shipped in the plugin's assets/src/apps/js/frontend/quiz directory, and because instructors are a semi-trusted role in typical LMS deployments, the practical exposure depends on how many untrusted or compromised Instructor accounts exist on an installation.

Know when Learnpress gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 5.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Authenticated instructor (PR:L) stores a payload that executes in a different user's (student's) browser, so scope changes (S:C) with UI:R and limited C/I impact, no availability impact.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

LearnPress plugin for WordPress through 4.4.9.1 contains a stored cross-site scripting vulnerability that allows authenticated instructors to inject scripts via quiz question hint and explanation fields. Attackers with the Instructor role can submit unsanitized payloads through the update_question AJAX handler that execute in the session of every student taking the quiz.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Medium
popular WordPress LMS plugin, widely installed but education-focused niche
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2024-8522 CRITICAL POC
10.0 Sep 12

SQL injection in LearnPress LMS plugin for WordPress (versions ≤ 4.2.7) allows unauthenticated remote attackers to injec

CVE-2023-6634 HIGH POC
8.1 Jan 11

The LearnPress plugin for WordPress is vulnerable to Command Injection in all versions up to, and including, 4.2.5.7 via

CVE-2023-6567 CRITICAL POC
9.8 Jan 11

The LearnPress plugin for WordPress is vulnerable to time-based SQL Injection via the ‘order_by’ parameter in all versio

CVE-2024-4434 CRITICAL POC
9.8 May 14

SQL injection in the LearnPress LMS plugin for WordPress (versions up to and including 4.2.6.5) allows remote unauthenti

CVE-2024-8529 CRITICAL POC
10.0 Sep 12

The LearnPress - WordPress LMS Plugin plugin for WordPress is vulnerable to SQL Injection via the 'c_fields' parameter o

CVE-2021-24951 CRITICAL POC
9.8 Dec 13

The LearnPress WordPress plugin before 4.1.4 does not sanitise, validate and escape the id parameter before using it in

CVE-2026-12976 MEDIUM POC
6.5 Aug 12

Unauthorized access to paid course content in LearnPress WordPress plugin (all versions before 4.4.4) allows any authent

CVE-2020-6010 HIGH POC
8.8 Apr 30

LearnPress Wordpress plugin version prior and including 3.2.6.7 is vulnerable to SQL Injection. Rated high severity (CVS

CVE-2022-3360 HIGH POC
8.1 Oct 31

The LearnPress WordPress plugin before 4.1.7.2 unserialises user input in a REST API endpoint available to unauthenticat

CVE-2024-11868 MEDIUM POC
5.3 Dec 10

The LearnPress - WordPress LMS Plugin plugin for WordPress is vulnerable to Sensitive Information Exposure in all versio

CVE-2026-86444 HIGH POC
7.1 Sep 16

Reflected cross-site scripting in the LearnPress WordPress plugin before 4.4.7 allows unauthenticated attackers to injec

CVE-2026-12970 HIGH POC
7.1 Jul 20

Reflected Cross-Site Scripting in the LearnPress WordPress plugin before 4.4.1 lets a remote attacker execute arbitrary

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy