CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-55596

CVE-2026-55596: DOM-based Cross-Site Scripting (XSS) in Plate Media Embed Component

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 25, 2026·6 min read·17 visits

Executive Summary (TL;DR)

A validation bypass in Plate's media component allows unauthenticated DOM-based XSS when rendering crafted document nodes.

CVE-2026-55596 is a critical DOM-based Cross-Site Scripting (XSS) vulnerability in the Plate rich-text editor framework (specifically within the @platejs/media package). The issue stems from an optimization fast-path that short-circuits safety parsing if a provider or source URL is already declared on an element. Consequently, serialized documents carrying malicious javascript: URLs bypass protocol sanitization and are loaded directly into iframe elements, leading to code execution.

Vulnerability Overview

The @platejs/media package is an essential module of the Plate rich-text editor, providing the structural capabilities to render, embed, and interact with external media components. The core rendering mechanism relies on parsing incoming URLs to display media players inside embedded document frameworks. By trusting serialized metadata without subsequent path verification, the software introduces a critical security vulnerability within client-side content processing.\n\nThis vulnerability is classified as Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') (CWE-79). The vulnerability presents a direct attack surface for DOM-based Cross-Site Scripting (XSS). An attacker can exploit this weakness by embedding arbitrary client-side script payloads within a formatted document representation.\n\nBecause Plate is designed to parse and load documents in various enterprise platforms, the vulnerability has extensive operational reach. Untrusted input parsed through the media components executes directly in the victim's active web session. Consequently, the flaw compromises the confidentiality and integrity of web sessions utilizing the rich-text framework.

Root Cause Analysis

The root cause of CVE-2026-55596 resides in a short-circuit logic path inside the useMediaState hook located in packages/media/src/react/media/useMediaState.ts. To minimize processing latency for pre-saved files, the hook was designed to check for pre-existing metadata properties. If either element.provider or element.sourceUrl was populated, the component bypassed standard sanitization functions.\n\nThis optimization created a security disparity between standard user inputs and pre-serialized input structures. While interactive text entry triggered immediate parser-level protocol validation via parseMediaUrl, direct database loads or API integrations passed data directly into the renderer. An attacker could craft a raw JSON node possessing legitimate provider attributes along with a malicious URL.\n\nWhen the system parsed the crafted JSON, the condition if (element.provider || element.sourceUrl) resolved to true. The hook immediately returned the unverified URL, failing to delegate processing to the protocol whitelist checker. The rendering function received the raw, unsafe URL directly and mapped it to the iframe's source locator.

Code Analysis

Analysis of the vulnerability requires evaluating the code path in useMediaState.ts before the patch was applied. The original structure evaluated incoming nodes to determine if they possessed metadata attributes. The following code segment illustrates the vulnerable logical check:\n\ntypescript\n// Packages/media/src/react/media/useMediaState.ts (Pre-patch)\nexport const useMediaState = ({\n urlParsers = [parseVideoUrl],\n}: {\n urlParsers?: EmbedUrlParser[];\n} = {}) => {\n // ...\n const embed = useMemo(() => {\n if (!url) return;\n\n if (\n !isUrl(url) &&\n !urlParsers.some((parser) => url.startsWith(parser.name))\n ) \n return;\n\n // VULNERABLE METADATA TRUST BYPASS\n if (element.provider || element.sourceUrl) {\n return {\n id: element.id,\n provider: element.provider,\n sourceUrl: element.sourceUrl,\n url,\n };\n }\n\n return parseMediaUrl(url, { urlParsers });\n }, [element.id, element.provider, element.sourceUrl, urlParsers, url]);\n};\n\n\nThe corresponding patch resolved this bypass by removing the optimization check entirely. This forces all documents, regardless of pre-computed provider status, to run through the validation function:\n\ndiff\n- if (element.provider || element.sourceUrl) {\n- return {\n- id: element.id,\n- provider: element.provider,\n- sourceUrl: element.sourceUrl,\n- url,\n- };\n- }\n-\n return parseMediaUrl(url, { urlParsers });\n- }, [element.id, element.provider, element.sourceUrl, urlParsers, url]);\n+ }, [urlParsers, url]);\n\n\nBy forcing every invocation to pass through parseMediaUrl(url, { urlParsers }), the framework guarantees that URI schemes are validated. If a non-whitelisted scheme such as javascript: is detected, the URL parsing engine rejects it, neutralizing the attack vector.

Exploitation Methodology

To exploit this vulnerability, an attacker must be able to write or modify a Plate-compatible serialized document. Since the user interface sanitizes interactive inputs, the attacker bypasses the frontend controls and transmits the payload directly via API. The attacker constructs a serialized node block mimicking a Vimeo element but carrying a script execution directive.\n\nmermaid\ngraph LR\n A["Attacker Payload: JSON Node"] -->|Saves via API| B[("Workspace Database")]\n B -->|Loads Document| C["useMediaState React Hook"]\n C -->|Reads pre-defined provider| D["Short-circuit validation"]\n D -->|Passes raw javascript URL| E["MediaEmbedElement iframe src"]\n E -->|Executes in victim browser| F["DOM-based XSS"]\n\n\nThe target payload must explicitly provide a recognized provider parameter alongside the malicious payload in the url parameter. An example structure is as follows:\n\njson\n{\n "type": "media_embed",\n "id": "exploit-node",\n "provider": "vimeo",\n "sourceUrl": "https://player.vimeo.com/video/76979871",\n "url": "javascript:parent.postMessage('plate-media-xss', '*')",\n "children": [{ "text": "" }]\n}\n\n\nWhen a victim accesses the document containing this payload, the victim's client browser parses the JSON document. The rendering component receives the bypass return values and establishes the iframe element. The document browser frame then loads the javascript: URL, executing the arbitrary payload under the administrative session.

Impact Assessment

The impact of a successful DOM-based Cross-Site Scripting attack is high, affecting confidentiality and integrity. Because the script executes directly within the origin of the hosting application, it inherits the permissions of the active user. Attackers can leverage this position to extract cookies, access web storage variables, or capture access tokens stored in local memory.\n\nIf the hosting application maintains administrative interfaces, the attacker can execute administrative API commands on behalf of the victim. This enables complete account takeover, modification of application configurations, or lateral movement into broader cloud systems. The absence of an active availability impact indicates the target server remains stable, but data confidentiality is compromised.\n\nWith a CVSS Base Score of 8.7, this vulnerability demands immediate mitigation across all affected deployments. Because the attack requires low privileges and low complexity, any user with permission to contribute text to a workspace can deploy the malicious payload. This raises the likelihood of targeted internal compromise in multi-tenant environments.

Remediation & Mitigation

The primary remediation path requires upgrading the @platejs/media package to version 53.1.4 or later. This release removes the vulnerable fast-path and establishes rigorous sanitization as a mandatory pipeline step. Development teams should audit package lockfiles to confirm transitive dependencies are updated appropriately.\n\nIf immediate dependency upgrades are not feasible due to release cycles, teams can construct a safe rendering wrapper. A custom component must intercept incoming url values and validate the protocols before passing them to the editor's original component. The following code block demonstrates a potential defensive wrapper implementation:\n\ntypescript\nimport React from 'react';\nimport { MediaEmbedElement } from '@platejs/media';\n\nexport const SanitizedMediaEmbed = (props: any) => {\n const { element } = props;\n const unsafeProtocolRegex = /^(javascript|data|vbscript):/i;\n\n if (unsafeProtocolRegex.test(element?.url)) {\n return <div className=\"media-placeholder\">Unsafe URL Blocked</div>;\n }\n\n return <MediaEmbedElement {...props} />;\n};\n\n\nIn addition to frontend overrides, implementing API-level ingestion sanitization provides defense-in-depth protection. Applications should validate document nodes during database ingestion, stripping any schema properties matching unauthorized schemes. This prevents the persistence of malicious payloads inside the backend storage systems.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.7/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
EPSS Probability
0.43%
Top 64% most exploited

Affected Systems

@platejs/mediaplatejs@platejs/utils@platejs/core

Affected Versions Detail

Product
Affected Versions
Fixed Version
@platejs/media
udecode
>= 53.0.0, < 53.1.453.1.4
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork
CVSS Score8.7
EPSS Score0.0043
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Known Exploits & Detection

GitHub Security AdvisoryAdvisory context containing PoC tests verifying XSS bypass mechanism.

Vulnerability Timeline

Vulnerability fixed in GitHub commit 6214914ca811adf22d0ad503154494216eed68ba
2026-06-14
CVE-2026-55596 Published and GHSA Advisory Disclosed
2026-07-08
NVD Metadata Updated and Analysis Finalized
2026-07-10

References & Sources

  • [1]GitHub Security Advisory GHSA-qj6x-xx2h-8hvv
  • [2]Vulnerability Fix Pull Request (PR #5014)
  • [3]Vulnerability Fix Commit
  • [4]Plate Version v53.1.4 Release Notes
  • [5]NVD Vulnerability Detail Page

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 minutes ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
1 views•6 min read
•5 minutes ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
1 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•9 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read
•10 days ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
18 views•5 min read
•10 days ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
24 views•6 min read