Summary
CVE-2026-46649 is a critical improper authentication-throttling vulnerability (CWE-307) in Joplin Server’s SSO login-code verification endpoint. The endpoint accepts a 9-digit numeric code without any rate limiting, allowing an unauthenticated remote attacker to brute-force the code and hijack an active login session. The issue carries a CVSS v4.0 score of 9.1 (Critical).
Technical details
- Root cause: the
GET /api/login_with_code/:idendpoint (packages/server/src/routes/api/login.ts) validates a 9-digit numeric SSO login code (range 0–999999999) but does not apply thelimiterLoginBruteForcerate limiter that protects other authentication endpoints. - The code has a 10-minute validity window, but the lack of throttling means all ~1 billion possible values can be attempted within that window.
- Trigger conditions: a target user must have an active SSO login attempt in progress (i.e., a valid, unexpired login code exists) for the attacker to guess.
- Attack vector: network, no authentication or user interaction required by the attacker; unlimited unauthenticated requests can be sent to the endpoint.
- Impact: a correctly guessed code returns a full, valid session token, giving the attacker complete access to the victim’s notes, notebooks, and account settings — effectively a full account takeover.
Affected software
- Joplin Server versions 3.3.0 and earlier (deployments with SSO login enabled)
- Fixed in Joplin Server 3.7.2 and later
Severity
- CVSS v4.0 Base Score: 9.1 (Critical)
- Vector:
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Mitigation and recommended actions
- Immediate: Upgrade Joplin Server to version 3.7.2 or later, where the SSO login-code endpoint is now subject to the
limiterLoginBruteForcerate limiter. - If immediate patching is not possible: disable SSO login on Joplin Server until upgraded, and monitor/alert on high volumes of requests to the
login_with_codeendpoint as a compensating control. - After upgrading, review authentication logs for signs of prior brute-force attempts against SSO login codes.

