{"id":"CVE-2026-46650","state":"PUBLISHED","title":"Joplin: Stored XSS in public share viewer via javascript: URL bypass in isAcceptedUrl","description":"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.","publishedAt":"2026-09-21T21:16:12.297Z","updatedAt":"2026-09-29T13:57:46.486Z","severity":{"score":4.4,"label":"Medium","version":"3.1","vector":"CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N","source":"GitHub_M"},"assigner":"GitHub_M","products":["laurent22 joplin"],"affected":[{"vendor":"laurent22","product":"joplin","versions":[{"version":"< 3.7.2","status":"affected"}]}],"references":["https://github.com/laurent22/joplin/security/advisories/GHSA-x9vj-jrqf-9wcm","https://github.com/laurent22/joplin/pull/15435","https://github.com/laurent22/joplin/commit/9fdc2d4adbd7b7326a2d0dcc32e12b705bfc285e"],"weaknesses":["CWE-79"],"ingestedAt":"2026-10-29T20:12:07.131Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/46xxx/CVE-2026-46650.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-46650","state":"PUBLISHED","datePublished":"2026-09-21T21:16:12.297Z","dateUpdated":"2026-09-29T13:57:46.486Z","assignerShortName":"GitHub_M","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateReserved":"2026-05-15T20:11:54.585Z"},"containers":{"cna":{"title":"Joplin: Stored XSS in public share viewer via javascript: URL bypass in isAcceptedUrl","descriptions":[{"lang":"en","value":"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."}],"affected":[{"vendor":"laurent22","product":"joplin","versions":[{"version":"< 3.7.2","status":"affected"}]}],"references":[{"url":"https://github.com/laurent22/joplin/security/advisories/GHSA-x9vj-jrqf-9wcm","name":"https://github.com/laurent22/joplin/security/advisories/GHSA-x9vj-jrqf-9wcm","tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/laurent22/joplin/pull/15435","name":"https://github.com/laurent22/joplin/pull/15435","tags":["x_refsource_MISC"]},{"url":"https://github.com/laurent22/joplin/commit/9fdc2d4adbd7b7326a2d0dcc32e12b705bfc285e","name":"https://github.com/laurent22/joplin/commit/9fdc2d4adbd7b7326a2d0dcc32e12b705bfc285e","tags":["x_refsource_MISC"]}],"metrics":[{"cvssV3_1":{"attackComplexity":"HIGH","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":4.4,"baseSeverity":"MEDIUM","confidentialityImpact":"LOW","integrityImpact":"LOW","privilegesRequired":"LOW","scope":"CHANGED","userInteraction":"REQUIRED","vectorString":"CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N","version":"3.1"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-79","lang":"en","description":"CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')","type":"CWE"}]}],"providerMetadata":{"shortName":"GitHub_M","orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateUpdated":"2026-09-21T21:16:12.297Z"},"source":{"advisory":"GHSA-x9vj-jrqf-9wcm","discovery":"UNKNOWN"}},"adp":[{"title":"CISA ADP Vulnrichment","references":[{"url":"https://github.com/laurent22/joplin/security/advisories/GHSA-x9vj-jrqf-9wcm","tags":["exploit"]}],"metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-09-29T13:57:39.474410Z","id":"CVE-2026-46650","options":[{"Exploitation":"poc"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-09-29T13:57:46.486Z"}}]}}}