Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain course-editing role account
-
DeliveryInject JS into course meta tag field
-
ExploitPayload stored unsanitized
-
ExecutionVictim loads course page
-
ImpactScript executes in victim browser session
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 that holds a course-editing role (PR:L) with access to the Course Management module, where the attacker populates the course meta tag fields - specifically the values rendered into index.html as meta name/property title, image, description, keywords (and the og:/twitter: equivalents), plus the course title, description heading and 'Know More' link. These values were stored without HTML sanitization and emitted without escaping prior to 2.52.0. Exploitation is further gated by required victim interaction (UI:P): a second user must load the affected course page for the stored script to execute. Limiting factors: the privileged editor role, the need for a victim to view the page, and the fix in 2.52.0 which both strips HTML on storage and escapes on render. |
| Impact | This is a stored XSS (CWE-79) in Frappe LMS rated CVSS 4.0 5.1 (Medium) with vector AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N. The signals are internally consistent and point to a bounded, lower-tier risk rather than a critical priority. PR:L confirms the attacker must already be an authenticated user holding a course-editing role - this is not an anonymous internet-facing flaw - and UI:P confirms a victim must visit the affected course page for the payload to fire. The vulnerable-system confidentiality/availability are N and integrity is only L, with the meaningful impact falling on the subsequent system (SC:L/SI:L) i.e. the victim's browser session. No EPSS score was supplied, the vulnerability is NOT in CISA KEV, and no working exploit is referenced - only the vendor advisory and fix commits. The vuln.today decision label is 'this_month', not 'act_now' or 'emergency', aligning with a moderate-urgency, patch-on-normal-cycle posture. Net assessment: a genuine but privilege-gated, interaction-dependent stored XSS affecting a niche product - real enough to patch, but not a widespread or urgent exploitation threat. |
| Exploit ScenarioDerived | An authenticated user who has been granted a course-editing role injects a malicious JavaScript payload into one of the meta tag fields (e.g. title, description, keywords, image) of a course in the Course Management module. The value is stored without HTML sanitization and later rendered unescaped into the page's <meta>/<title>/heading markup, so when another user - such as a learner or administrator - views that course page, the script executes in their browser session. No public working exploit is referenced, though the vendor advisory and fix commits describe the mechanism precisely. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Stored cross-site scripting in Frappe LMS versions up to and including 2.51.0 lets an authenticated user who holds a course-editing role plant malicious JavaScript in the Course Management meta tag fields, which is then stored and rendered unescaped into the course page (including the meta name/property tags for title, image, description and keywords, the og:/twitter: equivalents, the course title and description headings, and the 'Know More' link). The script executes in the browser of any second user who opens the affected course page, which is why victim interaction is required. Severity is rated Medium - CVSS 4.0 base 5.1 (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N), with the independent assessment scoring CVSS 3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N; exploitation needs an authenticated editor account plus a victim visiting the page, no public exploit code was identified at time of analysis, and the issue is fixed in 2.52.0.
RemediationAI
Upgrade Frappe LMS to 2.52.0 or later, which is the version the advisory names as fixed and where meta tag values are stripped of HTML tags before storage and escaped on render; the fix is delivered by commits cd6aca25f7d28425660720db4fdb920727edb670 (output escaping across frontend/index.html) and f244a6c9ff6e0b104fec48b2d97af4cc09896b60 (input stripping in lms/lms/api.py), with details in advisory https://github.com/frappe/lms/security/advisories/GHSA-9fqj-95wr-6hm6. Until the upgrade can be applied, review and reduce the set of accounts holding course-editing roles and audit existing course meta tag values for injected HTML, since the payload persists in stored metadata and will be re-emitted on every page view; note that such scoping does not remove payloads already saved and updating to 2.52.0 is the complete fix.
Affected VersionsENISA
Affected Packages
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
CWE-79 (Improper Neutralization of Input During Web Page Generation) in the Frappe LMS Course Management module. The frontend landing template in frontend/index.html interpolated server-side values - meta.title, meta.image, meta.description, meta.keywords and the og:/twitter: mirrors, plus the course title, description block and link - directly into <title>, <meta> and <h1>/<a href> contexts; the corresponding writer endpoint update_meta_info() in lms/lms/api.py persisted the supplied meta tag values without sanitization. The upstream fix does two things: it strips HTML tags from every meta tag value on storage via frappe.utils.strip_html_tags(), and it applies the template escaper filter (| e) to all of those interpolations on render, closing both the storage and the output-encoding side of the flaw. The CPE cpe:2.3:a:frappe:lms:*:*:*:*:*:*:*:* denotes that all builds prior to the 2.52.0 branch are in scope; the meta-tag fields are writable by course-editing roles, so the injection surface is the course metadata authoring workflow rather than an anonymous endpoint.
Know when Frappe 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
Authenticated course-editor role sets PR:L; stored payload needs a victim page view so UI:R; XSS executing in the victim's browser crosses authority (S:C) with limited C/I and no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Frappe Learning Management System (LMS) is a learning system that helps users structure their content. Prior to version 2.52.0, an authenticated user with a course editing role can inject malicious JavaScript through meta tag fields in the Course Management module. The values are stored without adequate HTML sanitization and are not safely escaped when rendered, allowing stored cross-site scripting. This issue is fixed in version 2.52.0.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Stored cross-site scripting leading to code execution in Frappe Framework 15.89.0 (and the ERPNext application built on
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
Authenticated SQL injection in Frappe ERPNext through 15.89.0 allows low-privilege users to extract arbitrary database c
SQL injection in Frappe ERPNext through 15.89.0 lets an authenticated attacker with a valid session and access to the Pa
Authenticated server-side template injection in Frappe ERPNext through 15.89.0 lets a user who can create or modify an A
An SQL injection vulnerability exists in the frappe.desk.reportview.get functionality of ERPNext 11.1.38. Rated high sev
Arbitrary file read in the Frappe full-stack web application framework allows remote unauthenticated attackers to retrie
SQL injection in Frappe HelpDesk 1.14.0 dashboard functionality allows authenticated attackers to execute arbitrary SQL
In Frappe ERPNext 15.57.5, the function get_rfq_containing_supplier() at erpnext/buying/doctype/request_for_quotation/re
EUVD-2026-114195
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB