Skip to main content

Joplin Server CVE-2026-105785

MEDIUM
Unverified Password Change (CWE-620)
2026-10-05 GitHub_M
4.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain victim CSRF/confirmation token via separate leak
  2. Delivery
    Replay token to public password-reset endpoint
  3. Exploit
    Purpose-less token accepted by resetPassword
  4. Execution
    Set attacker-controlled password, delete sessions/API apps
  5. Impact
    Full 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

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

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

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.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

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

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Low
optional self-hosted sync server for open-source note app; niche footprint
Data Quality
4 sources
Confidence: Medium
NVD CVE.org EPSS Vulnrichment GitHub

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 No
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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

Affected Products (CPE)CVE.org

cpe:2.3:a:laurent22:joplin:*:*:*:*:*:*:*:*

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