/

CVE-2026-105630

Severity:

HIGH RISK

(8.7)

Stored XSS (CWE-79) in Plane SVG Attachment Uploads

CVE-2026-105630

Deferred

Vulnerability type

Category:

Stored Cross-Site Scripting

CWE:

CWE-79, CWE-434, CWE-616

Impact:

Account Takeover

Severity:

HIGH RISK

(8.7)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Plane allows authenticated low-privilege workspace members to upload SVG attachments that retain an attacker-controlled content type and are later served inline. When a victim opens the asset link from a same-origin self-hosted deployment, embedded script may execute in the application's security context and compromise the victim's session.

Plane allows authenticated low-privilege workspace members to upload SVG attachments that retain an attacker-controlled content type and are later served inline. When a victim opens the asset link from a same-origin self-hosted deployment, embedded script may execute in the application's security context and compromise the victim's session.

Affected context

The issue occurs in Plane deployments where workspace members can upload generic or issue attachments and the asset-download flow preserves an SVG content type while issuing an inline Content-Disposition response. Risk is higher in default self-hosted MinIO configurations where assets are served from the same origin as the Plane application, allowing browser content isolation boundaries to be bypassed.

The issue occurs in Plane deployments where workspace members can upload generic or issue attachments and the asset-download flow preserves an SVG content type while issuing an inline Content-Disposition response. Risk is higher in default self-hosted MinIO configurations where assets are served from the same origin as the Plane application, allowing browser content isolation boundaries to be bypassed.

Exploit preconditions

  • Attack surface: Generic and issue attachment upload and asset-download functionality
  • Required access: An authenticated workspace member with permission to upload attachments, including a Guest in affected configurations
  • Trigger point: A victim opens an attacker-controlled SVG asset URL
  • Why exploitation is possible: The uploaded SVG is served inline with an attacker-controlled content type and can execute script when delivered from the application's origin
  • Attack surface: Generic and issue attachment upload and asset-download functionality
  • Required access: An authenticated workspace member with permission to upload attachments, including a Guest in affected configurations
  • Trigger point: A victim opens an attacker-controlled SVG asset URL
  • Why exploitation is possible: The uploaded SVG is served inline with an attacker-controlled content type and can execute script when delivered from the application's origin

Why this happens

The underlying bug combines insufficient file-type and content validation with unsafe browser delivery behavior. User-controlled SVG content is treated as an inline, same-origin asset rather than as untrusted downloadable content, allowing active markup to execute in a privileged application context. This maps primarily to CWE-79: Improper Neutralization of Input During Web Page Generation, with related concerns involving unrestricted file upload (CWE-434) and insufficient isolation of uploaded content (CWE-616).

The underlying bug combines insufficient file-type and content validation with unsafe browser delivery behavior. User-controlled SVG content is treated as an inline, same-origin asset rather than as untrusted downloadable content, allowing active markup to execute in a privileged application context. This maps primarily to CWE-79: Improper Neutralization of Input During Web Page Generation, with related concerns involving unrestricted file upload (CWE-434) and insufficient isolation of uploaded content (CWE-616).

Potential impact

  • An attacker could execute JavaScript in a victim's application security context
  • A victim's session could be compromised
  • An attacker may perform actions as the victim, including an administrator
  • Workspace data could be accessed, modified, or deleted
  • The issue could lead to account takeover or broader workspace compromise
  • An attacker could execute JavaScript in a victim's application security context
  • A victim's session could be compromised
  • An attacker may perform actions as the victim, including an administrator
  • Workspace data could be accessed, modified, or deleted
  • The issue could lead to account takeover or broader workspace compromise

General mitigation guidance

Mitigation generally focuses on treating uploaded files as untrusted content and preventing active formats from executing in the application's origin.

Common defensive patterns include:

  • Allowing only required image formats and rejecting or transforming SVG uploads when active content is not needed
  • Validating file type using trusted server-side inspection rather than relying on client-supplied metadata
  • Serving user-uploaded assets from a separate, isolated origin or storage domain
  • Using attachment response headers that prevent inline execution where appropriate
  • Applying a restrictive Content Security Policy and related browser isolation controls
  • Enforcing authorization checks for asset access and using least-privilege storage permissions
  • Avoiding exposure of session credentials to scripts through secure cookie settings

Mitigation generally focuses on treating uploaded files as untrusted content and preventing active formats from executing in the application's origin.

Common defensive patterns include:

  • Allowing only required image formats and rejecting or transforming SVG uploads when active content is not needed
  • Validating file type using trusted server-side inspection rather than relying on client-supplied metadata
  • Serving user-uploaded assets from a separate, isolated origin or storage domain
  • Using attachment response headers that prevent inline execution where appropriate
  • Applying a restrictive Content Security Policy and related browser isolation controls
  • Enforcing authorization checks for asset access and using least-privilege storage permissions
  • Avoiding exposure of session credentials to scripts through secure cookie settings

How teams detect issues like this

Detection can combine application testing, code review, and deployment policy checks:

  • Search upload handlers for acceptance of SVG or other active document formats without sanitization
  • Review whether uploaded content types are derived from attacker-controlled metadata
  • Inspect asset-download responses for inline Content-Disposition and same-origin delivery
  • Test whether untrusted assets are hosted on the application's origin
  • Add static analysis or automated review rules for unsafe file-upload and HTML-rendering patterns
  • Monitor attachment uploads, asset access, and unusual authenticated actions following asset visits

Detection can combine application testing, code review, and deployment policy checks:

  • Search upload handlers for acceptance of SVG or other active document formats without sanitization
  • Review whether uploaded content types are derived from attacker-controlled metadata
  • Inspect asset-download responses for inline Content-Disposition and same-origin delivery
  • Test whether untrusted assets are hosted on the application's origin
  • Add static analysis or automated review rules for unsafe file-upload and HTML-rendering patterns
  • Monitor attachment uploads, asset access, and unusual authenticated actions following asset visits

Sources

SourceLink
github.comgithub.com/makeplane/plane/commit/9dff20e04808286acb372119d88c666b802b1d50
github.comgithub.com/makeplane/plane/pull/9312
github.comgithub.com/makeplane/plane/releases/tag/v1.4.0
github.comgithub.com/makeplane/plane/security/advisories/GHSA-ch8j-vr4r-qf6h

Frequently asked

questions

An authenticated low-privilege workspace member who can upload a generic or issue attachment may be able to plant the malicious asset. A victim must then open the resulting link for the browser-side impact to occur.

It can be reached through the application's upload and asset-delivery functionality over the network, but exploitation depends on authenticated upload access and a victim viewing the asset.

Treat uploaded files as untrusted, reject or safely transform active formats such as SVG when unnecessary, and serve retained files from an isolated origin with non-executable download behavior.

Enforce server-side file validation, separate user content from the application origin, apply restrictive browser security policies, and test upload and download paths for stored script execution.

An authenticated low-privilege workspace member who can upload a generic or issue attachment may be able to plant the malicious asset. A victim must then open the resulting link for the browser-side impact to occur.

It can be reached through the application's upload and asset-delivery functionality over the network, but exploitation depends on authenticated upload access and a victim viewing the asset.

Treat uploaded files as untrusted, reject or safely transform active formats such as SVG when unnecessary, and serve retained files from an isolated origin with non-executable download behavior.

Enforce server-side file validation, separate user content from the application origin, apply restrictive browser security policies, and test upload and download paths for stored script execution.

Find out what's already
exploitable in your codebase.