Skip to main content

Plane CVE-2026-105638

| EUVDEUVD-2026-92594 CRITICAL
Improper Restriction of Excessive Authentication Attempts (CWE-307)
2026-10-05 GitHub_M
9.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Request magic-code login for target email
  2. Exploit
    Script guesses against unthrottled verify endpoint
  3. Execution
    Brute-force 6-digit OTP within Redis TTL
  4. Impact
    Authenticate as victim and take over account

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
Exploitation Conditions

Exploitation requires that the target Plane instance (prior to 1.4.0) has magic-code email login enabled and that the attacker knows or can enumerate the victim's email address used for sign-in. The attacker must complete the OTP brute force within the magic code's Redis TTL window, since a new token is not issued per guess. No authentication and no user interaction are required (PR:N/UI:N). Limiting factors for defenders: deployments that rely solely on SSO or password auth without the magic-code flow are not exposed; the attack generates a very high volume of requests to the verify endpoint (a detectable signal) and must succeed before the current code expires.

Impact

All available signals point to a genuine high-priority authentication weakness rather than an inflated high-CVSS issue. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/C:H/I:H) is internally consistent with the described flaw: a remote, unauthenticated attacker can brute-force a six-digit (~20-bit) magic-code OTP because the verifier enforces no per-code failed-attempt counter, never invalidates the Redis entry on a wrong guess, never locks the email, and bypasses even the configured DRF AnonRateThrottle (because the view extends django.views.View, not APIView, and no Django-level rate limiter is present). Successful brute force yields full account takeover, justifying C:H/I:H. The one tempering factor is that the guess space must be exhausted within the OTP's Redis TTL window, which demands a high request volume - but with zero throttling this is readily automatable, so AC:L is defensible. Key probabilistic signals are MISSING: no EPSS score was provided, so likelihood of exploitation cannot be quantified; KEV status is not indicated (treat as not listed); and no public exploit was provided. The source-code patch diff is public, which materially lowers the bar for an attacker to reconstruct the exploit even though no weaponized POC is identified. Net: a real, actionable priority for any Plane deployment that enables magic-code email login, even though active-exploitation and EPSS evidence are absent from the input.

Exploit ScenarioDerived

An attacker requests a magic-code login for a known victim email address, then scripts the verify endpoint to submit guesses for the six-digit code. Because wrong guesses are neither counted, rate-limited, nor cause the Redis token to be invalidated, the attacker brute-forces the ~20-bit code space within the token's validity window and logs in as the victim. No public exploit is identified at time of analysis, but the fixing PR diff publicly reveals the exact root cause.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 05, 2026

Brute-forceable magic-code email login in Plane versions prior to 1.4.0 allows unauthenticated remote attackers to guess a six-digit numeric login code and take over accounts. The verify endpoint extends django.views.View instead of DRF's APIView, so the configured AnonRateThrottle never runs, and there is no per-code attempt counter, no counter invalidation, and no Django-level throttle middleware behind it, leaving roughly 20 bits of OTP entropy with effectively unlimited guesses inside the code's Redis TTL window. There is no public exploit identified at time of analysis and no confirmed active exploitation, but the 9.1 CVSS reflects a full account takeover path (C:H/I:H) with no authentication or user interaction required, and the fix was released in Plane 1.4.0.

RemediationAI

Upgrade to Plane 1.4.0, which is the vendor-released patch and the version in which this issue is fixed; the release notes and the GHSA-mqjv-rwgv-4gxq advisory are the authoritative sources, and the code change is visible in PR 9130 and commit b1c78fe4c832e188454840eb38fd20cd05ef8b0a. The upstream fix caps wrong-code attempts at five per issued token using an atomic Redis counter that invalidates the code on exhaustion, manually applies the authentication throttle to the plain Django magic sign-in/sign-up views (DRF's AnonRateThrottle could not run there), and makes the throttle rate configurable via the AUTHENTICATION_RATE_LIMIT environment variable with a new default of 10/minute instead of 30/minute. If upgrading immediately is not possible, the most effective compensating control is to disable or block the magic-code email login flow entirely and require SSO or password authentication; deployments that need the flow can place an IP- or email-keyed rate limit in front of the verify endpoint at the reverse proxy or WAF (for example nginx limit_req), accepting the trade-off that aggressive throttling may affect legitimate users behind shared NAT, and can monitor for high-volume bursts of verify requests against a single email as the primary detection signal. Note that the pre-1.4.0 code performed no counter increment and no lockout, so any compensating control must be enforced outside the application - application-level settings alone cannot mitigate this in affected versions.

Affected VersionsENISA

plane < 1.4.0

Affected Packages

euvd plane fix: 1.4.0

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

The issue is a textbook CWE-307 (Improper Restriction of Excessive Authentication Attempts) weakness in Plane's magic-code authentication provider (apps/api/plane/authentication/provider/credentials/magic_code.py). Plane issues a six-digit numeric one-time code by email and stores it in Redis with a TTL; the six-digit space is only about 20 bits, so an attacker who knows or can enumerate a victim's email address can script guesses against the verify endpoint. Three design choices compound the problem: the verifier has no failed-attempt counter and a wrong code neither increments a counter nor deletes the Redis entry nor locks the email; the verifier is built on django.views.View rather than DRF's APIView, so DRF's throttle_classes (including AnonRateThrottle/AuthenticationThrottle) are never invoked during initial(); and the middleware stack contains no Django-level limiter such as django-ratelimit, django-axes, or an IP-throttling middleware. The upstream fix confirms this analysis by adding a per-token MAX_VERIFY_ATTEMPTS = 5 counter implemented as an atomic Redis Lua INCR-plus-EXPIRE script (to survive concurrent wrong-code requests, where a read/modify/write JSON approach would race), clamping the counter TTL to the remaining token TTL so the lockout does not extend indefinitely, and deleting the token on exhaustion. The patch also adds an authentication_throttle_allows() helper that manually runs AuthenticationThrottle against a plain Django HttpRequest for the magic sign-in/sign-up views, and lowers/configures the default rate from 30/minute to 10/minute via the AUTHENTICATION_RATE_LIMIT environment variable. The affected CPE is cpe:2.3:a:makeplane:plane:*:*:*:*:*:*:*:* (all releases before 1.4.0), and the relevant tags point to a Python/Django application backed by Redis.

Know when Plane 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 9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 9.1 CRITICAL

Unauthenticated network brute force of a low-entropy OTP with no lockout or throttle grants full account takeover, so PR:N/AC:L/C:H/I:H; no availability impact.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Oct 05, 2026 - 20:17 EUVD
CVE Published
Oct 05, 2026 - 18:09 cve.org
CRITICAL 9.1

DescriptionCVE.org

Plane is an open-source project management tool. Prior to 1.4.0, Plane's magic-code email login uses a six-digit numeric OTP with approximately 20 bits of entropy. The verifier has no per-code failed-attempt counter, and an incorrect code does not increment a counter, invalidate the Redis entry, or lock the email address. The verifier extends django.views.View rather than DRF's APIView, so the configured AnonRateThrottle limit does not apply. The middleware stack also contains no Django-level rate limiter such as django-ratelimit, django-axes, or an IP-throttling middleware. This vulnerability is fixed in 1.4.0.

Technical POC Analysis

CWE-307: Improper Restriction of Excessive Authentication Attempts.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Plane versions prior to 1.4.0 contain a critical account takeover vulnerability in the magic-code email login flow, allowing remote attackers to guess six-digit login codes and gain control of user accounts. This puts sensitive project data, credentials, and communications at risk for any organization using affected Plane deployments. Leadership should prioritize immediate upgrade to Plane 1.4.0 and review access logs for suspicious login attempts.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Low
niche self-hosted open-source project-management tool, limited enterprise footprint
Data Quality
4 sources
Confidence: Medium

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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Plane

View all
CVE-2023-2268 HIGH POC
7.5 Jul 15

Plane version 0.7.1 allows an unauthenticated attacker to view all stored server files of all users. Rated high severity

CVE-2026-105636 CRITICAL
9.9 Oct 05

Authenticated users who can create a workspace in Plane can force the application's background worker to fetch internal-

CVE-2026-105641 CRITICAL
9.8 Oct 05

Unauthenticated remote attackers can forge Django-signed session cookies, CSRF tokens, and password-reset tokens, and by

CVE-2026-105639 CRITICAL
9.8 Oct 05

Workspace invitation hijacking in Plane prior to 1.4.0 lets an unauthenticated attacker take over a pending workspace in

CVE-2024-47830 MEDIUM POC
5.8 Oct 11

Plane is an open-source project management tool. Rated medium severity (CVSS 5.8), this vulnerability is remotely exploi

CVE-2026-105637 CRITICAL
9.6 Oct 05

Improper authorization in Plane before 1.4.0 lets an authenticated workspace Guest hijack file assets from other project

CVE-2026-105640 CRITICAL
9.1 Oct 05

Account takeover in Plane (makeplane) versions prior to 1.4.0 allows remote unauthenticated attackers to log in as exist

CVE-2026-104976 HIGH
8.7 Oct 05

Server-side request forgery in Plane, the open-source project management tool, allows a low-privilege user of a connecte

CVE-2026-104966 HIGH
8.7 Oct 05

Authenticated cross-workspace access control bypass in Plane (makeplane/plane) before version 1.4.0 lets any user with a

CVE-2026-105632 HIGH
8.7 Oct 05

Plane prior to 1.4.0 allows an authenticated workspace member to bypass project-level authorization and join any project

CVE-2026-105630 HIGH
8.7 Oct 05

Stored cross-site scripting in Plane prior to 1.4.0 lets an authenticated low-privilege workspace member - including a G

CVE-2026-104979 HIGH
8.7 Oct 05

Stored cross-site scripting in Plane (versions up to and including 1.3.1) allows any authenticated user - including a br

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy