Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Joplin Server
-
DeliveryCraft job ID with URL-encoded ../ segments
-
ExploitparseSubPath decodes past /transcribe/ prefix
-
ExecutionServer proxies to internal backend endpoint
-
ImpactReturn internal admin/health/config data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a Joplin Server instance running with the configuration setting TRANSCRIBE_ENABLED=true - the vulnerable GET/POST /api/transcribe/:id handlers only proxy to the transcription backend when this feature flag is on, so default deployments without transcription are not exposed. The attacker must hold a valid authenticated Joplin Server session (PR:L), and a reachable transcription backend (TRANSCRIBE_BASE_URL) with adjacent internal endpoints (admin/health/config) must exist for the escaped path to return sensitive data. No user interaction is needed. The practical value depends on what those neighboring backend endpoints actually expose. |
| Impact | This is a low-to-moderate real-world risk that maps well to its 4.3 CVSS score rather than being an inflated rating. The vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N confirms network reachability with low complexity, but PR:L means a valid authenticated Joplin Server account is required, and impact is confidentiality-only (C:L) with no integrity or availability effect. No EPSS score, KEV listing, or public POC was provided, so per the precision rules this is 'no public exploit identified at time of analysis' - there is no signal of active or automated exploitation. A key limiting factor absent from the CVSS vector but explicit in the description is the TRANSCRIBE_ENABLED=true configuration gate: the vulnerable route only exists when the transcription feature is turned on, which is not the default and further narrows the exposed population. The one point worth verifying is the confidentiality magnitude: the description says the proxied backend responses 'potentially' expose administrative, health, or configuration data - if those internal endpoints leak secrets/credentials the real impact could approach C:H, but the vendor rated C:L and the actual sensitivity of the reachable transcription-backend endpoints is not confirmed in the input, so C:L is retained. Overall: a legitimate defensive priority for the small set of self-hosted Joplin Server operators who have transcription enabled, not a broad emergency. |
| Exploit ScenarioDerived | An authenticated user on a Joplin Server instance that has TRANSCRIBE_ENABLED=true sends a request to GET /api/transcribe/:id with a job ID containing URL-encoded slash and parent-directory sequences (e.g. ..%2F..%2Fhealth). parseSubPath() decodes the value and the server builds a backend URL that escapes the /transcribe/ prefix, proxying the request to other transcription-backend endpoints and returning their responses, which may reveal internal administrative, health, or configuration data. No public exploit code was identified, though the fix commit's test cases (..%2Fadmin, ..%2F..%2Fhealth) effectively document the exploitation technique. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Path traversal in Joplin Server's transcription proxy endpoints lets an authenticated user on instances configured with TRANSCRIBE_ENABLED=true escape the intended /transcribe/ URL prefix and reach neighboring endpoints on the transcription backend, potentially exposing internal administrative, health, or configuration data. The flaw affects versions prior to 3.7.7; because the CVSS vector is CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N, the attacker must already hold a valid authenticated server session and the only demonstrated impact is limited confidentiality loss - this is a low-to-moderate real-world risk that maps well to its 4.3 score rather than an inflated rating. There is no public exploit identified at time of analysis, no CISA KEV listing, and exploitation additionally requires a reachable transcription backend (TRANSCRIBE_BASE_URL) with adjacent internal endpoints worth reading.
RemediationAI
Vendor-released patch: upgrade Joplin Server to 3.7.7 or later, which adds the validateJobId() allowlist (^[a-zA-Z0-9_-]+$) that returns HTTP 400 on malformed job IDs before any outbound fetch; references are the vendor advisory https://github.com/laurent22/joplin/security/advisories/GHSA-r7wp-3494-fwf4 and the fix commit https://github.com/laurent22/joplin/commit/d97a5091a35c2923984d3777320500b594afcdce. If upgrading immediately is not possible, the highest-value compensating control is to set TRANSCRIBE_ENABLED=false, which removes the vulnerable proxy entirely at the cost of disabling the transcription feature for all users; alternatively, network-segment the transcription backend so that only the intended /transcribe/ endpoint is reachable and no administrative, health, or configuration routes sit adjacent to it, accepting that a future routing mistake could re-expose them. Because exploitation requires a valid authenticated session, additionally tightening who can hold Joplin Server accounts (disabling self-registration, auditing active sessions) reduces the attacker pool but does not remove the flaw; note that upstream has not released an interim patched build for older branches beyond 3.7.7, and no public exploit code has been observed, so opportunistic scanning rather than targeted exploitation is the more likely near-term risk.
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 Server can optionally proxy speech-to-text jobs to a separate transcription service when TRANSCRIBE_ENABLED=true. The handlers for GET /api/transcribe/:id and POST /api/transcribe/:id in packages/server/src/routes/api/transcribe.ts took the request path segment, decoded it via the framework's parseSubPath() helper, and interpolated it directly into a fetch() call against ${TRANSCRIBE_BASE_URL}/transcribe/${id}. Because URL-encoded slash (%2F) and parent-directory (%2E%2E) sequences were decoded after routing but before the outbound URL was built, a job ID such as ..%2Fadmin or ..%2F..%2Fhealth resolved to a path outside the intended /transcribe/ prefix, turning the proxy into a generic forwarder to arbitrary paths on the transcription backend - the classic CWE-22 root cause of unsanitized path segments reaching a downstream path resolution. The upstream fix introduces a validateJobId() allowlist that rejects anything not matching ^[a-zA-Z0-9_-]+$ with an HTTP 400 before any fetch is issued, and the accompanying test asserts that ..%2Fadmin, ..%2F..%2Fhealth, and abc.def are all refused and that fetch is never called. The CPE cpe:2.3:a:laurent22:joplin:*:*:*:*:*:*:*:* covers the Joplin project broadly, but only the server component ships these routes.
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:U/C:L/I:N/A:N
Network-reachable API with low complexity but requires an authenticated account (PR:L); impact is confidentiality-only disclosure of internal backend responses (C:L), no integrity or availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Joplin is an open source note-taking and to-do application that organises notes and lists into notebooks. Prior to 3.7.7, the GET /api/transcribe/:id and POST /api/transcribe/:id handlers in packages/server/src/routes/api/transcribe.ts on Joplin Server instances with TRANSCRIBE_ENABLED=true pass the decoded id directly into transcription backend URLs. An authenticated user can place URL-encoded slash and parent-directory segments in the job ID, causing parseSubPath() to decode a path that escapes the intended /transcribe/ prefix. The server then proxies the request to other transcription-backend endpoints and can return their responses, potentially exposing internal administrative, health, or configuration data. This issue is fixed in version 3.7.7.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
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-84169
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB