Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-priv Joplin Server user
-
DeliveryCraft note with javascript: URL padded to 32-char fragment
-
ExploitPublish as public share
-
ExecutionVictim middle-clicks link in non-hardened browser
-
PersistScript executes in Server origin
-
ImpactRead page content and make authenticated same-origin requests
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 a running Joplin Server (public-sharing feature) and an authenticated low-privileged account able to create and publish a note as a public share (PR:L). The crafted href must contain a 32-character [0-9a-zA-Z] path fragment to satisfy the unanchored internal-resource regex in isAcceptedUrl(). Exploitation is strongly LIMITED by required victim interaction (UI:R): ordinary left-click is blocked, so the victim must specifically middle-click or use 'Open in new tab', AND must be using an older or non-hardened browser because current Chrome and Firefox block javascript: new-tab navigation. Impact is amplified only when the victim is signed in, enabling authenticated same-origin requests in the Joplin Server origin. Fixed in 3.7.2 by anchoring the regex to the start of the URL. |
| Impact | This is a genuine but low-priority stored XSS. The vendor CVSS of 4.4 (CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N) is well-calibrated and matches the description: network reachable but high complexity, requiring an authenticated low-privileged Joplin Server user AND victim user interaction. The AC:H rating is strongly justified - the description explicitly states ordinary left-click is blocked in the current build, and modern Chrome/Firefox block javascript: new-tab navigation, so execution only succeeds via middle-click or 'Open in new tab' on an older or non-hardened browser. This browser-hardening dependency is the dominant mitigating factor and separates this from a typical drive-by XSS. No EPSS score, no CISA KEV listing, and no public standalone exploit are provided (the PR ships a regression test with the payload, which is not a weaponized exploit); exploitation status is therefore: no public exploit identified at time of analysis. Signals are consistent rather than conflicting - moderate CVSS, no exploitation intelligence, and heavy environmental gating all point the same direction. This is a legitimate patch-when-convenient issue, not an emergency. |
| Exploit ScenarioDerived | A low-privileged Joplin Server user crafts an HTML note containing a link whose href is a javascript: URL padded with a matching 32-character path fragment (e.g. javascript:/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/;alert(1)) so it slips past the unanchored isAcceptedUrl() regex, then publishes it as a public share. A signed-in victim opens the shared note and middle-clicks or 'Open in new tab's the link in an older or non-hardened browser, causing the script to run in the Joplin Server origin where it can read page-visible content and issue authenticated same-origin requests as the victim. No public standalone exploit exists, though the fix PR (#15435) includes a test case demonstrating the payload. |
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 (including Joplin Server deployments) before 3.7.2 lets a low-privileged authenticated Server user publish a crafted HTML note as a public share whose javascript: link passes the renderer's internal-resource validation. Exploitation is heavily constrained: the victim must middle-click or use 'Open in new tab' on the link and be running an older or non-hardened browser, because current Chrome and Firefox block javascript: new-tab navigation, and ordinary left-click is already blocked; if execution succeeds while the victim is signed in, script runs in the Joplin Server origin and can read page-visible content and issue authenticated same-origin requests. Rated CVSS 4.4 (AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N), no public exploit code identified at time of analysis and no confirmed active exploitation (not in CISA KEV); a vendor-released patch (3.7.2) is available.
RemediationAI
Vendor-released patch: upgrade Joplin to 3.7.2 or later, which is the version in which isAcceptedUrl() was changed to the anchored regex /^:\/[0-9a-zA-Z]{32}(\/.*)?$/; upgrade both the client/rendering components and any Joplin Server instance serving public shares, since the Server origin is where the injected script executes. Apply the vendor advisory (https://github.com/laurent22/joplin/security/advisories/GHSA-x9vj-jrqf-9wcm) and track the upstream fix at PR 15435 (https://github.com/laurent22/joplin/pull/15435) and commit 9fdc2d4adbd7b7326a2d0dcc32e12b705bfc285e if you maintain a fork or vendor a build of the renderer package. Until every rendering path is patched, the highest-value compensating control is to restrict who can create public shares on Joplin Server - require review or approval for share publication, or disable the public-sharing feature entirely for untrusted/low-privileged accounts, at the cost of losing self-service public note distribution. Organizations that cannot patch immediately can also reduce exposure by treating notes received as shares as untrusted input and discouraging middle-click/open-in-new-tab on links from shares, though this is a user-behaviour control rather than a technical barrier; note that browser-side hardening (current Chrome/Firefox already block javascript: new-tab navigation) mitigates but does not remediate the underlying sanitizer defect. Adding a Content-Security-Policy to the Joplin Server origin that disallows inline and javascript: script execution will break the payload but must be validated against the web client's own script requirements before production rollout.
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
The flaw is a CWE-79 (improper neutralization of input during web page generation) defect in Joplin's shared HTML sanitization utility. In packages/renderer/htmlUtils.ts, isAcceptedUrl() decides which hrefs the sanitizer preserves when rendering an HTML note; it used the unanchored pattern /:\/[0-9a-zA-Z]{32}/ to recognize Joplin's internal resource URLs (a colon-slash prefix followed by a 32-character alphanumeric id). Because the regex was not anchored, any string merely containing that pattern anywhere - for example 'javascript:/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/;alert(1)' - satisfied the check, so a dangerous scheme URL was emitted as a live link in rendered note HTML rather than being stripped or rewritten to 'href="#"'. The attacker-controlled input therefore survives sanitization only in the context of that mis-specified validation, and the rendered link is what the victim must activate through a secondary navigation path (middle-click / open-in-new-tab) rather than a normal click. The fix anchors the expression to the start and end of the URL - /^:\/[0-9a-zA-Z]{32}(\/.*)?$/ - which both rejects scheme-prefixed payloads and constrains accepted values to well-formed :/<32-char-id>(/path) internal resource references; unit tests were added alongside the change (PR 15435, commit 9fdc2d4) covering javascript:, data: and vbscript: payloads and the ':/short' case. Joplin's client and renderer are cross-platform (desktop, mobile, CLI) with Joplin Server providing the sharing backend, which is why the CPE cpe:2.3:a:laurent22:joplin:*:*:*:*:*:*:*:* is version-ranged rather than product-specific; the security boundary is the Server origin when a public share is served.
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:H/PR:L/UI:R/S:C/C:L/I:L/A:N
AC:H because execution needs a non-hardened/older browser plus middle-click; PR:L for the authenticated publisher; UI:R for victim click; S:C as script runs in the Server origin; C:L/I:L limited to page-visible data and same-origin requests.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
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.7.2, isAcceptedUrl() in packages/renderer/htmlUtils.ts uses an unanchored regular expression for internal resource URLs, allowing a javascript: URL containing a matching 32-character path fragment to pass validation and be emitted into an HTML note's link. A low-privileged Joplin Server user can publish the crafted HTML note as a public share. In the current build, ordinary left-click is blocked; demonstrated execution requires middle-click or Open in new tab in an older or non-hardened browser because current Chrome and Firefox block javascript: new-tab navigation. When execution succeeds, the script runs in the Joplin Server origin, can read page-visible content, and can make authenticated same-origin requests when the victim is signed in. This issue is fixed in version 3.7.2.
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-84180
NVD
CVE.org
EPSS
GitHub
Exploit-DB