Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate and craft malicious Fountain code block
-
DeliveryShare note or publish via Joplin Server
-
ExploitVictim renders note with Fountain enabled
-
ExecutionUnsanitized HTML executes script in viewer/server origin
-
ImpactExfiltrate reused-viewer or authenticated server-origin data
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 | Requires Fountain rendering to be enabled: this is non-default in desktop and mobile clients (user must enable it), but is ENABLED BY DEFAULT when notes are published through Joplin Server. The attacker must be able to get a malicious Fountain code block in front of a victim (authoring/sharing a note or a published note, consistent with PR:L). Impact is amplified when published notes are served from the same domain as server content, allowing access to data available to the authenticated browser in the server origin (the S:C, C:H scenario). Limiting factors: affects only Joplin versions prior to 3.6.15 / 3.7.2, requires Fountain rendering active, and impact is confidentiality-only (no integrity or availability effect). |
| Impact | This is a genuine but conditionally-gated stored XSS (CWE-79) in Joplin, a popular open-source note-taking app. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N, 7.7) reflects a scope-changing script-injection where a malicious Fountain code block executes JavaScript in the note-viewer or, for notes published via Joplin Server, in the authenticated server origin (hence S:C and C:H). The source diff confirms the root cause and fix: fountain.ts previously passed vendored fountain.js HTML output straight into note output, and the patch wraps both titlePageHtml and the script body in htmlUtils.sanitizeHtml() - the added test (sanitize_24) proves an <img onerror=...> payload was rendered live before the fix. Exploitation status is 'no public exploit identified at time of analysis': no CISA KEV listing, no POC referenced, and no EPSS score was supplied. The confidentiality-only impact is real (C:H, I:N, A:N) but exploitation depends on Fountain rendering being enabled - non-default on desktop/mobile but default-on when publishing through Joplin Server - which meaningfully narrows real-world exposure. Net: a legitimate priority for Joplin Server publishing deployments, but not a widespread drive-by threat; treat as medium-priority patch given a fix is confirmed available and no active exploitation is known. Note EPSS/KEV/POC signals are all absent from the input, so risk is assessed from CVSS and the confirmed patch alone. |
| Exploit ScenarioDerived | An attacker authors a note containing a crafted Fountain code block with an HTML/script payload (e.g. <img src=x onerror=...>) and gets it rendered by a victim - either shared/opened in a client with Fountain enabled, or published through Joplin Server where Fountain rendering is on by default. When the victim views it, the unsanitized payload executes in the note viewer and can read content later loaded in the reused viewer or, on a same-domain published server, access data available to the authenticated browser session. No public exploit code is identified, but the fix commit includes a working proof-of-concept payload in its regression test. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Stored cross-site scripting in Joplin's Fountain screenplay rendering path lets a malicious Fountain code block execute script in the note viewer whenever Fountain rendering is active. Affected are Joplin desktop and mobile clients prior to 3.6.15 and 3.7.2, plus Joplin Server deployments where published notes are rendered with Fountain enabled by default; the injected script can read content later loaded into the reused note viewer, and when published notes share the server's origin it can reach data available to an authenticated browser session in that origin. Exploitation requires the attacker to plant the malicious Fountain block in a note the victim renders (consistent with the PR:L vector), and no public exploit code was identified at time of analysis - the risk is real but gated on Fountain rendering being enabled. Fixed versions 3.6.15 and 3.7.2 are available.
RemediationAI
Vendor-released patch: upgrade Joplin to 3.6.15 or 3.7.2, the versions in which the Fountain renderer output is passed through htmlUtils.sanitizeHtml(); the fix is present in commit 8e0812de9d79d1f0698bb76a8c5d7e991df9748d and detailed in the advisory at https://github.com/laurent22/joplin/security/advisories/GHSA-f7q3-3grx-6wg9 (also see PR https://github.com/laurent22/joplin/pull/15659). If upgrading immediately is not possible, disable or avoid Fountain rendering on desktop and mobile clients - this is already a non-default, user-controlled setting, so leaving it off removes the attack surface entirely, at the cost of losing Fountain screenplay previews. For Joplin Server operators, Fountain rendering is enabled by default for published notes, so either upgrade or disable Fountain support for published notes; because the confidentiality impact in that scenario stems from published notes sharing the server's origin, isolating published content onto a separate origin (or restricting which notes can be published) limits the blast radius but does not fix the underlying sanitization gap and should be treated only as a temporary containment step. There is no confirmed public exploit code at time of analysis, but the stored-XSS payload is trivial to construct, so treat patching as time-sensitive.
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
Joplin renders Markdown to HTML through a markdown-it pipeline in packages/renderer, where the rule module packages/renderer/MdToHtml/rules/fountain.ts converts `fountain fenced blocks using a vendored copy of fountain.js. The bug (CWE-79, improper neutralization of input during web page generation) is that the HTML emitted by fountain.js - including both the rendered script body and any title-page HTML - was interpolated directly into the note output without passing through Joplin's HTML sanitizer. Because the injected markup is stored inside the note and re-rendered each time the note is opened, this is a stored XSS rather than a reflected one. The upstream fix imports htmlUtils and wraps both the title-page fragment and the fountain.js script output in htmlUtils.sanitizeHtml() before insertion, which strips the dangerous attributes and elements that let markup such as an <img onerror=...> payload execute. The CVSS vector's scope change (S:C) and confidentiality-only impact (C:H/I:N/A:N) reflect the fact that the injected script executes with the privileges of the note viewer or, in the Joplin Server publishing case, potentially within the origin hosting server content.
Know when Joplin 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
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
PR:L because the attacker must author/publish a note; S:C and C:H because injected script escapes into the server/viewer origin to read authenticated data; no integrity or availability impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
Joplin is an open source note-taking and to-do application that organises notes and lists into notebooks. Prior to 3.6.15 and 3.7.2, packages/renderer/MdToHtml/rules/fountain.ts passes HTML generated by the vendored fountain.js renderer into note output without sanitizing it. A malicious Fountain code block can therefore execute script when Fountain rendering is enabled in desktop or mobile clients, or when a note is published through Joplin Server where Fountain rendering is enabled by default. The script can read content subsequently loaded in the reused note viewer or, when published notes are served from the same domain as server content, access data available to an authenticated browser in the server origin. This issue is fixed in versions 3.6.15 and 3.7.2.
Technical POC Analysis
CWE-79 (improper neutralisation of input during web page generation - stored XSS).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A stored script-injection flaw in Joplin's Fountain screenplay rendering affects desktop and mobile clients prior to 3.6.15 and 3.7.2, as well as Joplin Server deployments that publish notes with Fountain rendering enabled by default. Because published notes can share the server's origin, an attacker-planted note can reach data available to an authenticated browser session, making this a data-exposure risk for the organization's note-sharing and publishing workflows rather than a cosmetic rendering issue. Leadership should care because the affected clients are widely used for handling sensitive internal content, and remediation requires coordinated client and server upgrades.
Apply vendor patch. Until upgraded to 3.6.15 or 3.7.2, disable Fountain rendering in affected Joplin clients and Joplin Server so malicious Fountain code blocks are not rendered, and limit which users can author or receive notes from untrusted sources.
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.
Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organised into
Joplin is a free, open source note taking and to-do application. Rated critical severity (CVSS 9.6), this vulnerability
Joplin is a free, open source note taking and to-do application. Rated critical severity (CVSS 9.6), this vulnerability
Joplin v2.8.8 allows attackers to execute arbitrary commands via a crafted payload injected into the Node titles. Rated
Joplin Server instances prior to 3.7.2 expose an SSO login-code redemption endpoint (GET /api/login_with_code/:id) that
Joplin is an open source, privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and
Joplin version 2.8.8 allows an external attacker to execute arbitrary commands remotely on any client that opens a link
Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organised into
Joplin 1.2.6 for Desktop allows XSS via a LINK element in a note. Rated medium severity (CVSS 6.1), this vulnerability i
An XSS issue in Joplin desktop 1.0.190 to 1.0.245 allows arbitrary code execution via a malicious HTML embed tag. Rated
Joplin version prior to 1.0.90 contains a XSS evolving into code execution due to enabled nodeIntegration for that parti
Joplin through 1.0.184 allows Arbitrary File Read via XSS. Rated medium severity (CVSS 5.4), this vulnerability is remot
EUVD-2026-84172
NVD
CVE.org
EPSS
GitHub
Exploit-DB