Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain account on linked Gitea instance
-
ExploitSet internal URL as profile avatar_url
-
ExecutionLog in to Plane via Gitea OAuth
-
ImpactPlane 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Plane version 0.7.1 allows an unauthenticated attacker to view all stored server files of all users. Rated high severity
Authenticated users who can create a workspace in Plane can force the application's background worker to fetch internal-
Unauthenticated remote attackers can forge Django-signed session cookies, CSRF tokens, and password-reset tokens, and by
Workspace invitation hijacking in Plane prior to 1.4.0 lets an unauthenticated attacker take over a pending workspace in
Plane is an open-source project management tool. Rated medium severity (CVSS 5.8), this vulnerability is remotely exploi
Improper authorization in Plane before 1.4.0 lets an authenticated workspace Guest hijack file assets from other project
Account takeover in Plane (makeplane) versions prior to 1.4.0 allows remote unauthenticated attackers to log in as exist
Brute-forceable magic-code email login in Plane versions prior to 1.4.0 allows unauthenticated remote attackers to guess
Authenticated cross-workspace access control bypass in Plane (makeplane/plane) before version 1.4.0 lets any user with a
Plane prior to 1.4.0 allows an authenticated workspace member to bypass project-level authorization and join any project
Stored cross-site scripting in Plane prior to 1.4.0 lets an authenticated low-privilege workspace member - including a G
Stored cross-site scripting in Plane (versions up to and including 1.3.1) allows any authenticated user - including a br
EUVD-2026-92533
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB