Skip to main content

Plane CVE-2026-104976

| EUVDEUVD-2026-92533 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-10-05 GitHub_M
8.7
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain account on linked Gitea instance
  2. Exploit
    Set internal URL as profile avatar_url
  3. Execution
    Log in to Plane via Gitea OAuth
  4. Impact
    Plane backend fetches unvalidated internal target (blind SSRF)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires that an administrator has enabled Gitea OAuth in Plane and configured GITEA_HOST for a legitimate Gitea instance (feature is off by default). The attacker must possess a valid, low-privilege account on that specific Gitea instance (consistent with PR:L) in order to set an attacker-controlled external avatar_url in their Gitea profile and trigger the OAuth login flow. No victim user interaction is needed (the attacker drives their own login). Exploitation is LIMITED by: the non-default OAuth-enabled configuration, the need for a Gitea account trusted by the target, and the avatar handler's image-only Content-Type/size restrictions which constrain data return to a mostly blind SSRF primitive.

Impact

This is a genuine but conditional SSRF (CWE-918) rather than a drop-everything emergency. The input provides a CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L) scoring 8.7, indicating network-reachable, low-complexity exploitation requiring low privileges and no user interaction. However, several signals temper real-world risk: there is no CISA KEV listing (no public evidence of active exploitation), no public exploit code identified in the provided references, and no EPSS probability was supplied to gauge likelihood. Crucially, exploitation is gated by two preconditions not reflected in the raw score - an administrator must have deliberately enabled Gitea OAuth against a legitimate Gitea instance, AND the attacker must hold a valid account on that Gitea instance (consistent with PR:L). I also assess the vendor's VC:H/VI:H impact as optimistic: the avatar code path only accepts image Content-Types and bounds size, so the primary primitive is a largely blind SSRF (internal reachability, port probing, hitting internal unauthenticated endpoints) rather than wholesale data exfiltration - verify impact assumptions against your internal network exposure. Net: treat as a real patch priority for any deployment that has enabled Gitea OAuth, lower priority otherwise.

Exploit ScenarioDerived

An administrator enables Gitea OAuth in Plane pointing at a trusted Gitea server. An attacker who holds (or registers) a normal account on that Gitea instance sets their profile avatar URL to an internal target such as http://169.254.169.254/ or an internal admin endpoint, then logs into Plane via Gitea OAuth, causing Plane's backend to issue an outbound request to the attacker-chosen internal address without IP validation. No public exploit code was identified at time of analysis; the attack is derived from the vendor advisory and patch diff.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 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

Server-side request forgery in Plane, the open-source project management tool, allows a low-privilege user of a connected Gitea instance to make the Plane server issue HTTP requests to internal or private addresses. The flaw affects versions prior to 1.4.0 and only manifests when an administrator has explicitly enabled Gitea OAuth and pointed GITEA_HOST at a legitimate Gitea deployment (the feature is off by default); an authenticated Gitea user then sets an internal URL as their profile avatar and logs in through OAuth, causing Plane to fetch that attacker-chosen target without validation. The result is a largely blind SSRF primitive, since the avatar handler only accepts image Content-Types and enforces a size cap, and no public exploit code or active exploitation has been identified at time of analysis.

RemediationAI

Vendor-released patch: Plane 1.4.0 (https://github.com/makeplane/plane/releases/tag/v1.4.0), which replaces the unchecked requests.get()/requests.post() calls with the pinned_fetch helpers from plane.utils.url_security; alternatively apply upstream PR 9163 (commit 04622ce1188c4680951f0001e35efb342fe51615). Because the OAuth vector requires the feature to be enabled, the fastest compensating control is to disable Gitea OAuth and clear any configured GITEA_HOST until the upgrade is in place - this removes the attack path entirely with no functional loss if Gitea login is not in use. If Gitea OAuth must remain enabled, restrict outbound traffic from the Plane API and worker containers to an allow-list containing the legitimate Gitea host plus any required external avatar CDNs; this contains the blast radius but requires ongoing egress-firewall maintenance and will break integrations that rely on other outbound destinations. Additionally, limit which Gitea accounts are permitted to authenticate (the attacker needs a valid account on the trusted Gitea instance), and review https://github.com/makeplane/plane/security/advisories/GHSA-hx79-5pj5-qh42 for further vendor guidance. Authentication requirements are confirmed from the assessed CVSS vector (PR:L): exploitation requires an authenticated, low-privilege account on the target's Gitea instance, and no public exploit code or confirmed active exploitation was identified at time of analysis.

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 root cause is CWE-918 (Server-Side Request Forgery). Plane validated GITEA_HOST only against its URL scheme, rejecting non-HTTP schemes but never checking whether the host resolved to a private, loopback, link-local, or otherwise internal IP address. All four outbound requests in the Gitea OAuth flow are derived from this unvalidated host and, unlike other Plane outbound paths, did not call validate_url(). A second injection point is avatar_url, which is read from the Gitea user's own profile and can be set to an arbitrary external URL; Plane's avatar download handler used a plain requests.get() with no IP validation, letting an authenticated Gitea user aim it at an internal service. The upstream fix (PR 9163, commit 04622ce, shipping in v1.4.0) introduces a plane.utils.url_security module with pinned_fetch and pinned_fetch_following_redirects helpers that resolve and validate the destination IP, pin the connection to that validated IP to close the DNS-rebinding TOCTOU window, re-validate every redirect hop, and stream the response so the existing size cap actually bounds memory. The same commit also hardens the webhook send path in apps/api/plane/bgtasks/webhook_task.py, which previously validated a URL and then let requests re-resolve it.

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 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N
vuln.today AI 5.0 MEDIUM

Network SSRF reachable by any low-privilege Gitea account (PR:L); scope changes to internal systems (S:C); image-only, size-capped handling makes it largely blind, so only limited confidentiality (C:L).

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 05, 2026 - 19:02 EUVD
CVE Published
Oct 05, 2026 - 17:45 cve.org
HIGH 8.7

DescriptionCVE.org

Plane is an open-source project management tool. Prior to 1.4.0, Plane validates GITEA_HOST only for its URL scheme and does not reject hosts that resolve to private or internal IP addresses. The four outbound requests in the Gitea OAuth flow are derived from this unvalidated host and do not call validate_url(). In addition, avatar_url is taken from the Gitea user's profile, where users can configure external avatar URLs. After an administrator enables Gitea OAuth for a legitimate instance, a Gitea user can set an internal URL as the profile avatar and log in through Gitea, causing Plane to fetch the internal target without validation. This issue is fixed in 1.4.0.

Technical POC Analysis

CWE-918 (Server-Side Request Forgery).

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, the open-source project management platform, can be abused to make the Plane server issue outbound HTTP requests to internal or private network addresses, with the vulnerable code path present in all releases prior to 1.4.0. The exposure is conditional and narrow: it only applies where an administrator has deliberately enabled the Gitea OAuth integration and pointed GITEA_HOST at a real Gitea deployment, meaning most default installations are not affected. Leadership should care because organizations running the integration with a low-privilege or untrusted Gitea user population could have internal services probed from a trusted internal host, and no vendor-released patch has been identified at time of analysis.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable the Gitea OAuth integration and unset GITEA_HOST so the vulnerable avatar-fetch path is unreachable (the feature is off by default); restrict Gitea OAuth logins to trusted accounts only; enforce outbound egress filtering from Plane servers to block private, loopback, and link-local address ranges; segment Plane from sensitive internal services; and monitor Plane server outbound connection logs for requests to internal addresses.

Threat Intelligence Overview

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Medium
popular self-hosted open-source project management tool, not universally deployed
Data Quality
5 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 HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

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-105638 CRITICAL
9.1 Oct 05

Brute-forceable magic-code email login in Plane versions prior to 1.4.0 allows unauthenticated remote attackers to guess

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