CVE-2026-47739 Overview
CVE-2026-47739 is a stored cross-site scripting (XSS) vulnerability in Frappe, a full-stack web application framework used to build business applications including ERPNext. The flaw exists in the Note feature, where user-supplied content is rendered without proper sanitization. An unauthenticated attacker can inject malicious script payloads that execute in the browser of any user who later views the affected Note. The issue is tracked under [CWE-79] and was patched in Frappe versions 15.106.0 and 16.16.0.
Critical Impact
Persistent script injection allows attackers to hijack sessions, perform actions on behalf of authenticated users, and exfiltrate data rendered within the Frappe interface.
Affected Products
- Frappe Framework versions prior to 15.106.0
- Frappe Framework versions prior to 16.16.0
- Downstream applications built on Frappe that expose the Note doctype
Discovery Timeline
- 2026-06-12 - CVE-2026-47739 published to NVD
- 2026-06-17 - Last updated in NVD database
Technical Details for CVE-2026-47739
Vulnerability Analysis
The vulnerability resides in the Note doctype of the Frappe framework. Frappe stores Note content and renders it inside the web client without applying sufficient HTML sanitization. When an attacker submits a Note containing script tags or event-handler attributes, the payload is stored in the database. Any subsequent viewer triggers execution of the script in their authenticated session context.
Stored XSS in a framework component is impactful because Notes are commonly shared across users, including administrators. The execution context inherits the privileges of the viewing user, allowing the attacker to invoke Frappe REST endpoints, read sensitive doctypes, or pivot through the application. According to the GitHub Security Advisory, the issue affects all releases prior to the fixed versions.
Root Cause
The root cause is missing or insufficient output sanitization on the Note content field. The framework treats the stored markup as trusted when rendering, rather than escaping HTML or restricting allowed tags and attributes. This violates the standard guidance for [CWE-79] handling of user-controlled HTML.
Attack Vector
The attack vector is network-based and requires no authentication or user interaction beyond viewing the malicious Note. An attacker with the ability to create or modify Notes submits a crafted payload. When another user opens the Note, the embedded JavaScript executes inside the Frappe origin and inherits the victim's session cookies and CSRF context.
No verified public proof-of-concept code is available. See the GitHub Security Advisory for vendor-supplied technical details.
Detection Methods for CVE-2026-47739
Indicators of Compromise
- Note records containing <script>, onerror=, onload=, or javascript: payloads in the content field
- Outbound requests from user browsers to unfamiliar domains immediately after opening a Note
- Anomalous Frappe REST API calls originating from administrator sessions shortly after Note viewing
Detection Strategies
- Query the Frappe database for Note documents whose content contains HTML event handlers or script tags
- Inspect web server access logs for POST requests to /api/method/frappe.client.insert or /api/resource/Note containing suspicious markup
- Review browser Content Security Policy (CSP) violation reports if CSP is enforced on the Frappe site
Monitoring Recommendations
- Enable audit logging for create and update operations on the Note doctype
- Monitor for privilege escalation patterns following Note interactions by administrative accounts
- Alert on unexpected session token usage or API calls that deviate from each user's baseline behavior
How to Mitigate CVE-2026-47739
Immediate Actions Required
- Upgrade Frappe to version 15.106.0 or 16.16.0 or later without delay
- Audit existing Note records for malicious HTML and remove or sanitize affected entries
- Rotate session secrets and force re-authentication for users who may have viewed tampered Notes
Patch Information
The Frappe maintainers addressed the issue by adding proper sanitization to the Note rendering path. Fixed releases are 15.106.0 for the 15.x branch and 16.16.0 for the 16.x branch. Refer to the GitHub Security Advisory GHSA-vxmp-h244-wv3r for full release details.
Workarounds
- Restrict Note creation and edit permissions to a minimal set of trusted users until patching is complete
- Deploy a strict Content Security Policy that disallows inline scripts on the Frappe site
- Place the Frappe application behind a web application firewall (WAF) with rules blocking common XSS payloads in Note submissions
# Upgrade Frappe using bench to a patched release
bench update --reset
bench switch-to-branch version-15 frappe --upgrade
bench pip install frappe==15.106.0
bench migrate
bench restart
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

