Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate and create workspace
-
DeliveryRegister webhook to attacker-controlled public URL
-
ExploitAttacker endpoint returns 302 to cloud metadata IP
-
ExecutionWorker follows redirect and fetches internal response
-
ImpactRead exfiltrated body via webhook-logs API
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 | The attacker must hold an account that can create a workspace and register a webhook (authenticated, PR:L), and the target Plane instance must be running a version prior to 1.4.0 where webhook_send_task calls requests.post() without allow_redirects=False. Exploitation requires that validate_url() is applied only to the originally submitted URL (which the attacker sets to a benign public host) while the redirect target is unvalidated, so the attacker-controlled public endpoint must return a 3xx redirect to an internal/reserved address. Impact is maximized when Plane runs on cloud infrastructure exposing an instance-metadata endpoint (e.g. 169.254.169.254) or reachable internal services. Limiting factors: requires authentication and workspace-creation privileges (not anonymous), requires the worker to actually dispatch a webhook event, and the payload for internal POSTs is the fixed webhook body (limited attacker control over request contents). |
| Impact | This is a genuine high-priority issue rather than an inflated-CVSS artifact, though slightly less severe than the 9.9 suggests. The CVSS vector (AV:N/AC:L/PR:L/UI:N/S:C) is internally consistent with the description: a network-reachable, low-complexity attack requiring only low privileges (the ability to create a workspace - PR:L, i.e. authenticated) and no user interaction, crossing a scope boundary into the internal network/cloud-metadata plane. The CWE-918 SSRF classification matches the described redirect-based bypass of validate_url(). No EPSS score, KEV listing, or standalone exploit POC was provided in the input; the referenced GitHub artifacts are the vendor advisory (GHSA-mq87-52pf-hm3h), the fix PR #9163, the patch commit, and the v1.4.0 release - these confirm the root cause and remediation but are NOT exploitation evidence. Therefore exploitation status is 'no public exploit identified at time of analysis.' The real risk driver is impact: a successful SSRF to cloud instance-metadata (e.g. 169.254.169.254) can disclose IAM credentials and lead to broader cloud-account compromise, which is why confidentiality impact is high. The main mitigating factor is the PR:L authentication requirement - the attacker must be able to register and create a workspace, so this is not fully anonymous internet-wide exploitation. Self-hosted Plane deployments running on cloud infrastructure prior to 1.4.0 should treat this as an urgent patch. |
| Exploit ScenarioDerived | An authenticated user who can create a workspace registers a webhook whose URL points to an attacker-controlled public endpoint that passes validate_url(). When an event fires, the Plane worker POSTs to that endpoint, which returns a 302 redirect to an internal address such as the cloud metadata service; because allow_redirects is not disabled, the worker follows the hop, fetches the internal response, and stores the body in webhook_logs, which the attacker then reads back through the workspace webhook-logs API. No public exploit code was identified, but the fix PR diff fully documents the vulnerable code path. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Authenticated users who can create a workspace in Plane can force the application's background worker to fetch internal-only resources - including cloud instance metadata endpoints - by registering a webhook whose URL points at an attacker-controlled public host that returns a 302 redirect to a private, loopback, or link-local address. Because the pre-1.4.0 webhook delivery task calls requests.post() without disabling redirects and only validates the originally submitted URL, the fetched response body is written into webhook_logs and can be read back through the workspace webhook-logs API, turning the SSRF into a practical internal-data exfiltration channel. All Plane versions prior to 1.4.0 are affected; the issue is fixed in 1.4.0, no public exploit code has been identified at time of analysis, and exploitation requires authentication plus workspace-creation privileges rather than being anonymous.
RemediationAI
Upgrade to Plane 1.4.0 or later, which is the vendor-released patch for this issue and is available at https://github.com/makeplane/plane/releases/tag/v1.4.0 (fix delivered via PR https://github.com/makeplane/plane/pull/9163 and commit 04622ce1188c4680951f0001e35efb342fe51615, advisory https://github.com/makeplane/plane/security/advisories/GHSA-mq87-52pf-hm3h); if an immediate upgrade is not possible, deploy compensating controls in this order. First, enforce network-level egress filtering on the Plane API/worker containers so outbound traffic to 169.254.169.254/32, 169.254.0.0/16, 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, and other reserved ranges is dropped - this neutralizes the redirect hop regardless of code version, at the cost of requiring an egress proxy or firewall rule and potentially breaking legitimate webhooks to internal services that some teams intentionally use. Second, on cloud hosts require IMDSv2 with a hop limit of 1 and token-only access, which makes metadata retrieval via a simple followed redirect fail; note this protects metadata specifically and not other internal HTTP services. Third, restrict workspace-creation and webhook-registration privileges to trusted users, since the attack is authenticated and preconditioned on that capability, and audit existing webhook_logs for entries whose response bodies contain unexpected internal content or metadata responses. None of these substitutes for the upgrade, since only 1.4.0 adds IP pinning against DNS rebinding and redirect-hop re-validation.
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
This is a server-side request forgery (CWE-918) rooted in an incomplete URL validation model. Plane's apps/api/plane/bgtasks/webhook_task.py guarded the initial webhook URL with validate_url() from plane.utils.ip_address, which blocks private, loopback, link-local, and reserved ranges - but the guard was applied before the request was issued, and the outbound call used requests.post() with the default allow_redirects=True behavior. As a result the HTTP client transparently followed any 3xx Location header, performing a fresh, unvalidated resolution and connection to whatever address the attacker's public server named. The same code path also carried a classic DNS-rebinding TOCTOU weakness: validating a hostname and then letting requests re-resolve it allows an attacker to swap in an internal IP between the two lookups. The upstream fix (PR #9163, commit 04622ce1188c4680951f0001e35efb342fe51615) introduces plane.utils.url_security.pinned_fetch / pinned_fetch_following_redirects, which resolve the host once, pin the connection to the validated IP to defeat rebinding, and re-validate every redirect hop - or refuse to follow redirects entirely in the webhook send path. The patch also reworks the sibling avatar-download path in the OAuth authentication adapter (apps/api/plane/authentication/adapter/base.py), which had the same follow-the-redirect exposure against attacker-influenceable profile image URLs, and converts SSRF validation failures into non-retryable, admin-visible webhook log entries.
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
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Authenticated workspace creator (PR:L), network and low complexity; redirect SSRF crosses into internal/metadata plane (S:C) disclosing credentials (C:H), with only limited integrity via fixed-body internal POSTs (I:L) and no availability impact.
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, the webhook delivery task in apps/api/plane/bgtasks/webhook_task.py calls requests.post() without allow_redirects=False and does not validate redirect targets. validate_url() blocks private, loopback, link-local, and reserved addresses in the original webhook URL, but the final URL reached after one or more redirects is not checked. A user who can create a workspace can register a webhook pointing to an attacker-controlled public endpoint that returns a 302 redirect to an internal address. The Plane worker then fetches internal resources, including cloud metadata, and stores the response body in webhook_logs, where the attacker can retrieve it through the workspace webhook-logs API. 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 installations running versions earlier than 1.4.0 allow a user who can create a workspace to turn the product's own webhook feature into a covert channel for reading internal-only network resources, including cloud instance metadata that frequently holds infrastructure credentials. Because the retrieved content is written into webhook logs and can be read back through the workspace webhook-logs API, an attacker can quietly extract sensitive internal data without direct network access to those systems. Leadership should treat this as a cloud credential-exposure risk for any self-hosted Plane instance reachable by non-administrative users, with the highest exposure in cloud environments where instance metadata services are enabled.
Apply vendor patch (upgrade to Plane 1.4.0). Where an immediate upgrade is not possible, restrict workspace-creation privileges, block background-worker egress to loopback, link-local, and private address ranges, disable or isolate the webhook feature, enforce IMDSv2, and monitor webhook_logs for internal data leakage.
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
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
Server-side request forgery in Plane, the open-source project management tool, allows a low-privilege user of a connecte
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-92701
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB