Skip to main content

LearnPress CVE-2026-12732

| EUVDEUVD-2026-40934 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-07-01 Wordfence GHSA-qrp7-xr7v-h39q
6.4
CVSS 3.1 · Vendor: Wordfence
Share

Severity by source

Vendor (Wordfence) PRIMARY
6.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
vuln.today AI
5.4 MEDIUM

Stored XSS requires victim page view (UI:R per CVSS guidance); contributor access required (PR:L); scope changes to victim browser (S:C); 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:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
Analysis Generated
Jul 01, 2026 - 08:36 vuln.today
CVE Published
Jul 01, 2026 - 07:53 nvd
MEDIUM 6.4

DescriptionCVE.org

The LearnPress plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'class_wrapper_form' shortcode attribute in versions up to, and including, 4.4.0. This is due to insufficient input sanitization and output escaping in the FilterCourseTemplate::sections() method at line 98, where the attacker-controlled attribute is inserted into an HTML class attribute via sprintf('<form class="%s">', $class_wrapper_form) without esc_attr() escaping. The FilterCourseShortcode::render() handler does not apply shortcode_atts() filtering, so raw user attributes flow directly through do_action('learn-press/filter-courses/layout', $data) into the template. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

AnalysisAI

Stored Cross-Site Scripting in the LearnPress WordPress LMS plugin (versions up to and including 4.4.0) allows authenticated contributors to permanently inject arbitrary JavaScript into WordPress pages via the unescaped 'class_wrapper_form' shortcode attribute. The payload persists in the database and executes in the browser of any visitor - including administrators - who loads the affected page, enabling session hijacking, credential harvesting, or privilege escalation through forged admin actions. No CISA KEV listing or public exploit code has been identified at time of analysis, but the Wordfence advisory includes precise code-level references that substantially lower the bar for independent reproduction.

Technical ContextAI

LearnPress is a WordPress LMS plugin by ThimPress (CPE: cpe:2.3:a:thimpress:learnpress_-_wordpress_lms_plugin_for_create_and_sell_online_courses:*:*:*:*:*:*:*:*) used for creating and selling online courses. The vulnerability is classified as CWE-79 (Improper Neutralization of Input During Web Page Generation). The root cause is a two-part failure: first, FilterCourseShortcode::render() at inc/Shortcodes/Course/FilterCourseShortcode.php:29 omits WordPress's standard shortcode_atts() call, which would normally whitelist and default-sanitize any shortcode attribute. Second, the raw attacker-supplied attribute value travels through a do_action('learn-press/filter-courses/layout', $data) hook into FilterCourseTemplate::sections() at inc/TemplateHooks/Course/FilterCourseTemplate.php:98, where it is interpolated directly into an HTML class attribute via sprintf('<form class="%s">', $class_wrapper_form) without WordPress's esc_attr() escaping function. An attacker can close the attribute with a double-quote and inject inline event handlers or script tags that become part of the stored page HTML.

RemediationAI

Update LearnPress to a version above 4.4.0; the upstream fix is available in WordPress plugin Trac changeset 3587186 (https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3587186%40learnpress&new=3587186%40learnpress), though an exact patched release version is not independently confirmed from the available data - verify in the WordPress.org plugin changelog before deploying. If immediate patching is not possible, the most effective compensating control is disabling contributor-level (and potentially author-level) publishing capability via the WordPress roles editor or a capability manager plugin, which prevents untrusted users from publishing pages containing shortcodes; the trade-off is that legitimate contributors lose publishing rights until the patch is applied. Alternatively, a mu-plugin or filter snippet can remove the 'learn-press/filter-courses' shortcode handler globally, eliminating the attack surface at the cost of disabling course-filter UI elements site-wide. Monitor the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/09c8db69-60fa-4087-9096-5d34ce44f616 for confirmed patched version numbers.

Share

CVE-2026-12732 vulnerability details – vuln.today

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