Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain high-privilege credentials
-
DeliveryAccess Frappe UI
-
ExploitInject XSS payload into _user_tags field
-
InstallStore malicious tag
-
C2Victim opens list/report view
-
ExecuteJavaScript executes in victim's browser
-
ImpactAttacker exfiltrates session/data or performs privileged actions
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 | Authentication as a user with privileges to write to the _user_tags field (typically high-privilege roles such as System Manager or custom roles with tag-editing permissions). The target view must render tags in list or report format (default behavior in Frappe). User interaction is required: a victim must open the list/report view where the malicious tag is displayed, triggering the JavaScript execution in their browser session. The payload is stored server-side, so once injected, it persists across page reloads and affects all users who access the contaminated view. No special Frappe configuration is required beyond standard multi-user setup; tag rendering is enabled by default. Exploitation is blocked only if: (1) the victim never opens the affected view, (2) the victim's browser enforces restrictive CSP blocking inline execution, or (3) the attacker lacks privileges to edit _user_tags. |
| Impact | This is a real but constrained risk. The CVSS 4.6 (low severity) reflects multiple limiting factors: authenticated access required (PR:H), user interaction needed (UI:A), and limited technical impact (VI:L, SI:L only). The SSVC framework rates exploitation as 'poc' (proof-of-concept available, not widespread weaponization), further suggesting controlled risk. The attack vector is network (AV:N) and low complexity (AC:L), meaning exploitation is technically straightforward once credentials are obtained, but the authentication barrier is substantial. Attack scope remains unchanged (S:X unclear from vector, treated as contained), limiting lateral impact. Real-world risk depends heavily on the organization's access control posture: if many users have high-privilege accounts, or if shared/reused credentials are common, risk escalates significantly. The unescaped renderer is a systemic issue affecting any view displaying tags, so multiple injection points may exist. Organizations should prioritize this based on: (1) How many high-privilege users exist in their Frappe instance, (2) Whether those users handle sensitive or trusted workflows (financial, approvals), and (3) Whether they use Frappe with external integrations that could be compromised via session theft. The combination of stored nature (survives page reloads) and user interaction requirement makes this a classic supply-chain/trusted-user attack vector rather than broad internet exposure. |
| Exploit ScenarioDerived | A Frappe administrator (or user with tag-editing permissions) is compromised or turns malicious. They create a new user or task record and inject a payload such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Apr 23, 2026
Stored cross-site scripting (XSS) in Frappe 16.10.10 allows authenticated attackers with high privileges to inject malicious JavaScript via crafted tag values in the _user_tags field, which execute when victims open list or report views. The vulnerability stems from unescaped interpolation of tag content into HTML attributes and element content. Exploitation requires user interaction (victim must open affected view) and high-level authentication, but results in session hijacking or data theft with partial technical impact; CISA SSVC framework rates this as exploitable via proof-of-concept with partial technical impact.
RemediationAI
Upgrade Frappe to a patched version released after 16.10.10. The primary fix is vendor patching of the tag renderer to implement proper output encoding using context-aware escaping (HTML entity encoding for element content, attribute-value escaping for attributes). Until a patch is available, implement compensating controls: (1) Restrict _user_tags field editing to trusted users only via role-based access control (trade-off: reduces metadata flexibility), (2) Implement Content Security Policy (CSP) with script-src 'self' directive to block inline script execution (trade-off: requires testing with Frappe's dynamic JavaScript, may break legitimate functionality), (3) Disable or hide tag rendering in list/report views by removing the tag display component from templates (trade-off: loses tag functionality in those views). For immediate tactical defense, audit user accounts with tag-editing permissions and remove high-privilege credentials for inactive or shared accounts. The Fluid Attacks advisory (https://fluidattacks.com/es/advisories/silvio) and Frappe GitHub repository should be monitored for patch release announcements.
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
Frappe is a Python-based web application framework that handles data rendering in list and report views. The vulnerability exists in the tag rendering component where the _user_tags field (a user-defined metadata field) is interpolated directly into HTML without sanitization. The root cause is improper output encoding (CWE-79, Improper Neutralization of Input During Web Page Generation). When tags are displayed in list or report contexts, the renderer treats tag content as trusted, embedding it into both HTML element content and attribute values without escaping special characters (< > " ') or encoding entities. This allows stored payloads to break out of their intended context and execute arbitrary JavaScript in the victim's browser within the security context of the Frappe application.
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:H/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Primary rating from NVD · only source for this CVE.
CVSS VectorNVD
Lifecycle Timeline
2DescriptionCVE.org
An authenticated attacker can store a crafted tag value in _user_tags and trigger JavaScript execution when a victim opens the list/report view where tags are rendered. The vulnerable renderer interpolates tag content into HTML attributes and element content without escaping. This issue affects Frappe: 16.10.10.
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-25071
GHSA-qg6x-fw6m-9qrp
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB