Skip to main content

Joplin EUVDEUVD-2026-84180

| CVE-2026-46650 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-21 GitHub_M
4.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-priv Joplin Server user
  2. Delivery
    Craft note with javascript: URL padded to 32-char fragment
  3. Exploit
    Publish as public share
  4. Execution
    Victim middle-clicks link in non-hardened browser
  5. Persist
    Script executes in Server origin
  6. Impact
    Read 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

joplin < 3.7.2

Affected Packages

euvd joplin fix: 3.7.2

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

Vendor (GitHub_M) PRIMARY 4.4 MEDIUM
AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 4.4 MEDIUM

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.

3.1 AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Sep 21, 2026 - 22:02 EUVD
CVE Published
Sep 21, 2026 - 21:16 cve.org
MEDIUM 4.4

DescriptionCVE.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

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Low
Niche self-hosted OSS note app; issue is Joplin Server + public-share specific
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

22
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +22
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in Joplin

View all
CVE-2025-27134 HIGH POC
8.8 Apr 30

Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organised into

CVE-2024-49362 CRITICAL POC
9.6 Nov 14

Joplin is a free, open source note taking and to-do application. Rated critical severity (CVSS 9.6), this vulnerability

CVE-2024-40643 CRITICAL POC
9.6 Sep 09

Joplin is a free, open source note taking and to-do application. Rated critical severity (CVSS 9.6), this vulnerability

CVE-2022-35131 CRITICAL POC
9.0 Jul 25

Joplin v2.8.8 allows attackers to execute arbitrary commands via a crafted payload injected into the Node titles. Rated

CVE-2026-46649 CRITICAL POC
9.1 Sep 21

Joplin Server instances prior to 3.7.2 expose an SSO login-code redemption endpoint (GET /api/login_with_code/:id) that

CVE-2024-53268 HIGH POC
8.8 Nov 25

Joplin is an open source, privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and

CVE-2022-40277 HIGH POC
7.8 Sep 30

Joplin version 2.8.8 allows an external attacker to execute arbitrary commands remotely on any client that opens a link

CVE-2025-27409 HIGH POC
7.5 Apr 30

Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organised into

CVE-2020-28249 MEDIUM POC
6.1 Nov 06

Joplin 1.2.6 for Desktop allows XSS via a LINK element in a note. Rated medium severity (CVSS 6.1), this vulnerability i

CVE-2020-15930 MEDIUM POC
6.1 Sep 24

An XSS issue in Joplin desktop 1.0.190 to 1.0.245 allows arbitrary code execution via a malicious HTML embed tag. Rated

CVE-2018-1000534 MEDIUM POC
6.1 Jun 26

Joplin version prior to 1.0.90 contains a XSS evolving into code execution due to enabled nodeIntegration for that parti

CVE-2020-9038 MEDIUM POC
5.4 Feb 17

Joplin through 1.0.184 allows Arbitrary File Read via XSS. Rated medium severity (CVSS 5.4), this vulnerability is remot

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy