Joplin Server
CVE-2026-105785
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain victim CSRF/confirmation token via separate leak
-
DeliveryReplay token to public password-reset endpoint
-
ExploitPurpose-less token accepted by resetPassword
-
ExecutionSet attacker-controlled password, delete sessions/API apps
-
ImpactFull account takeover and victim lockout
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Password change verification
|
| Exploitation Conditions | Exploitation requires the attacker to ALREADY possess the victim's CSRF, account-confirmation, or email-change token, obtained through a separate disclosure channel independent of this vulnerability - Joplin Server does not itself expose that token. Given that token, the attacker submits it to the public (unauthenticated) password-reset endpoint of Joplin Server versions prior to 3.7.2, where the pre-patch TokenModel stored tokens without a 'purpose' and UserModel.resetPassword accepted any token returned by userFromToken. The dominant limiting factor - and the reason for AC:H - is this hard dependency on an out-of-band token leak; there is no self-contained remote exploitation path. Deployments running Joplin Server 3.7.2 or later (which enforce TokenPurpose.PasswordReset) are not affected. |
| Impact | This is a genuine but conditional authentication-logic flaw (CWE-620, unverified password change) rather than a mass-exploitable critical issue. The CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N, base 4.8 MEDIUM) is internally consistent with the description: the attack is network-reachable and requires no authentication of the attacker (PR:N), but carries high attack complexity (AC:H) because it is strictly gated on the attacker first obtaining the victim's CSRF or account-confirmation token through a SEPARATE disclosure channel - Joplin itself does not leak that token. No EPSS score, CISA KEV entry, or POC was provided in the intelligence set, so exploitation probability signals are absent; per the precision rules this is 'no public exploit identified at time of analysis.' The SSVC/kill-chain picture is not automatable (it needs a pre-leaked, victim-specific token) and the technical impact is partial (password replacement plus deletion of sessions/API apps), which aligns with the low-to-medium real-world priority implied by the 4.8 base score. The one point worth flagging: the official vector rates confidentiality and integrity only Low and availability None, yet a successful attack is effectively a full account takeover (attacker-set password) combined with destruction of the victim's sessions and API applications - the real impact is arguably higher than C:L/I:L/A:N suggests, so treat the raw base score as a floor, not a ceiling. Net: a legitimate fix-worthy bug, but not a drop-everything emergency absent a known companion token-disclosure vector. |
| Exploit ScenarioDerived | An attacker who has already captured a victim's purpose-less CSRF or email-confirmation token from a separate leak (e.g., referrer/log exposure, XSS, or a misconfigured proxy) replays that token against the public Joplin Server password-reset endpoint. Because TokenModel stored tokens without a purpose and UserModel.resetPassword accepted any token from userFromToken, the server treats the CSRF/confirmation token as a valid reset token, letting the attacker set a new password and take over the account while deleting the victim's active sessions and API applications. No public exploit code was identified at time of analysis, and high attack complexity (AC:H) reflects the required out-of-band token. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Joplin Server releases prior to 3.7.2 store CSRF, account-confirmation, email-change and password-reset tokens in a single purpose-less pool, so an unauthenticated remote attacker who already holds any one of a victim's tokens can submit it to the public password-reset endpoint and set a new password for that account, simultaneously deleting the victim's existing sessions and API applications. The CVSS vector (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N, 4.8; independent assessment also credits A:L) reflects that exploitation is remote and needs no authentication, but is gated on a hard prerequisite: the attacker must obtain the victim's token through an entirely separate disclosure channel, because the vulnerability itself does not leak it. This is a CWE-620 unverified password change (token-purpose confusion) rather than a self-contained takeover path, it is not listed in CISA KEV, and no public exploit code was identified at time of analysis; the vendor has released an exact fix in Joplin Server 3.7.2.
RemediationAI
Vendor-released patch: Joplin Server 3.7.2 - upgrade all server instances to 3.7.2 or later, which introduces the tokens.purpose column and enforces TokenPurpose.PasswordReset in TokenModel.userFromToken and UserModel.resetPassword; the vendor advisory is at https://github.com/laurent22/joplin/security/advisories/GHSA-8qm8-mp6h-qf35 and the fix is upstream via https://github.com/laurent22/joplin/pull/16274 and commit 7766eefa11fa006b6a1971da24e0c820cf1d2118 (note that the migration must actually run on deploy, or pre-existing rows will carry an empty purpose value). Because the fix is entirely server-side there is no configuration toggle that closes the flaw in pre-3.7.2 builds; until you can upgrade, the practical compensating controls are: block the unauthenticated password-reset endpoint at the reverse proxy or WAF for all source IPs except a trusted admin range (trade-off: legitimate users cannot self-service password resets and must be handled manually), and purge or invalidate outstanding rows in the tokens table so any already-leaked CSRF, confirmation or email-change tokens cannot be replayed against the reset flow (trade-off: in-flight signup confirmations, email changes and CSRF-protected form submissions begin failing and users must restart those flows). Treat the root cause as an out-of-band token-disclosure problem: review logs and mailboxes for leaked reset/confirmation links, force password resets and revoke API applications for any account whose token may have been exposed, and consider that accounts with two-factor authentication still require the second factor to log in after a reset, although the attacker-triggered deletion of sessions and API applications still occurs.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Joplin Server is the self-hosted sync and sharing backend for the Joplin note-taking client (CPE cpe:2.3:a:laurent22:joplin:*:*:*:*:*:*:*:* is the broadest available identifier and does not cleanly separate server from client). The root cause is CWE-620 (Unverified Password Change), implemented as token-purpose confusion in packages/server/src/models/TokenModel.ts: tokens were persisted with only user_id and value, with no 'purpose' discriminator, so a token minted for a CSRF check, account confirmation or email change was indistinguishable from a password-reset token. packages/server/src/models/UserModel.ts then performed resetPassword via TokenModel.userFromToken, which accepted any matching token value regardless of what it was originally issued for, and password reset is reachable through an unauthenticated public endpoint. The upstream fix adds a 'purpose' column to the tokens table via migration 20260821120000_token_purpose.ts, introduces a TokenPurpose enum (starting with PasswordReset), requires generate() and userFromToken() to agree on that purpose, and rejects mismatches with ErrorNotFound. A regression test in UserModel.test.ts confirms a generic CSRF-style token is refused for reset while a password_reset-purpose token still succeeds. The high attack complexity in the CVSS vector is entirely attributable to the out-of-band token-leak prerequisite, not to any cryptographic barrier in the vulnerability itself.
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:N/UI:N/S:U/C:L/I:L/A:N
AC:H because exploitation depends on a separately-leaked victim token; PR:N as the reset endpoint is public; password replacement and session/API-app deletion give limited integrity and availability, with limited confidentiality via subsequent login.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
Joplin is an open source note-taking and to-do application that organises notes and lists into notebooks. Prior to Joplin Server 3.7.2, packages/server/src/models/TokenModel.ts stores CSRF, account-confirmation, email-change, and password-reset tokens without a purpose, and packages/server/src/models/UserModel.ts allows UserModel.resetPassword to accept any token returned by TokenModel.userFromToken. An attacker who obtains a victim's CSRF or confirmation token through a separate disclosure channel can submit it to the public password-reset endpoint, replace the victim's password, and cause the existing sessions and API applications to be deleted. This issue is fixed in Joplin Server 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 Request Forgery exploits the automatic credential inclusion behavior of web browsers.
Affected Products (CPE)CVE.org
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
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB