Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft fenced-code with malicious language info-string
-
DeliverySubmit Markdown to host app that persists it
-
ExploitBypass XSSPlugin via renderer-generated attribute injection
-
ExecutionVictim renders content in MdPreview
-
ImpactExecute JavaScript in application origin
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires (1) a host application that embeds md-editor-v3's MdPreview/MdEditor component at version <= 6.5.3, (2) that application accepting attacker-influenced Markdown, and (3) a victim rendering that Markdown (UI:R) - for stored XSS the application must also persist the Markdown and serve it to other users. Notably, having the shipped XSSPlugin enabled does NOT mitigate this, because the filter only inspects existing html_block/html_inline tokens and cannot see the renderer-generated HTML built from the fenced-code language value. The 'noHighlight: true' option only makes the PoC deterministic; the default highlighting path reaches the same unsafe return, so no special/non-default highlighting configuration is needed. Limiting factors: the attacker cannot exploit a deployment that never renders untrusted third-party Markdown, and only self-XSS results if no other user views the content. |
| Impact | This is a legitimate but moderate-severity client-side XSS (CWE-79) whose real-world risk hinges on deployment context rather than raw exploitability. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N = 6.1 Medium) is internally consistent with the vulnerability: network-reachable, low complexity, no privileges on the vulnerable library, but requiring victim rendering (UI:R) and crossing into the browser security context (S:C). No EPSS score, no CISA KEV listing, and no independent/external exploit tracking are provided - however a fully working proof-of-concept payload IS published inside the GHSA advisory itself (' |
| Exploit ScenarioDerived | An attacker submits Markdown containing a fenced code block whose language 'info string' carries a break-out payload (e.g. ' |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Cross-site scripting in the MdPreview component of md-editor-v3 (versions up to and including 6.5.3) lets remote attackers execute JavaScript in the host application's origin by supplying Markdown that contains a crafted fenced-code language string, and because the host can persist that Markdown it escalates to stored XSS for every user who later views the content. User interaction is required - a victim must render the malicious Markdown - and the shipped XSSPlugin does not prevent exploitation, since it only filters existing html_block and html_inline tokens and cannot inspect the renderer-generated HTML that the highlight callback produces. Scored CVSS 3.1 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N); publicly available exploit code exists (a working payload is included in the upstream GHSA advisory), no confirmed active exploitation (no CISA KEV listing), and the vendor-released patch fixes the issue in version 6.5.4.
RemediationAI
Upgrade md-editor-v3 to 6.5.4 or later (npm install md-editor-v3@6.5.4, or npm install md-editor-v3@latest), which escapes the language value with md.utils.escapeHtml and quotes the language attribute in useMarkdownIt.ts; because the same commit also replaces innerHTML with textContent in useCopyCode.ts and escapes copy-button tips and editorId-derived values in the codetabs plugin, taking the full release is preferable to hand-porting the single-line change. Advisory: https://github.com/imzbf/md-editor-v3/security/advisories/GHSA-3rm2-h79c-8qw6; fix commit: https://github.com/imzbf/md-editor-v3/commit/2c07360420e74087f5bc63032ab155d93e0a0b10; patched release: https://github.com/imzbf/md-editor-v3/releases/tag/v6.5.4. If the dependency cannot be updated immediately, the effective compensating control is to normalize fenced-code info strings before they reach MdPreview or MdEditor - strip the language token or allowlist it with a strict pattern such as /^[A-Za-z0-9_+-]{1,32}$/, discarding anything containing quotes, angle brackets, equals signs or whitespace. The trade-off is that aliases, file-path-style labels and unusual language names used by your authors will silently lose syntax highlighting until the allowlist is widened. Do not rely on the shipped XSSPlugin, and do not rely on setting noHighlight: true: the advisory confirms the default highlighting path reaches the same unsafe return, so disabling highlighting provides no protection. Post-render sanitization of the previewed HTML with a library such as DOMPurify can strip the injected ontoggle/onerror handlers, but it must run on every render of untrusted content, adds a dependency and parsing cost, and can be bypassed if any code path renders the component output directly. Where untrusted Markdown must be displayed, isolate the preview in a sandboxed iframe on a separate origin without cross-origin scripting privileges, which keeps a successful payload away from session tokens, cookies and same-origin APIs at the cost of losing tight editor integration with the host page.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
md-editor-v3 is a Vue 3 Markdown editor and preview component written in JSX and TypeScript, and it delegates parsing to markdown-it. In packages/MdEditor/layouts/Content/composition/useMarkdownIt.ts (around line 206), useMarkdownIt() registers a markdown-it highlight callback whose final return builds HTML from a template literal: <pre><code class="language-${language}" language=${language}>${codeSpan}</code></pre>. The language value is taken from the fenced code block info string and is concatenated into the class attribute and into an unquoted language attribute without escaping or quoting, so characters such as a double quote, '>' or '=' break out of the attribute context and let an attacker add event handlers (the advisory's payload uses ontoggle with a <details open> element). The library's XSSPlugin runs as a markdown-it plugin on the source tokens and only strips pre-existing html_block and html_inline tokens, so it never sees HTML that the renderer generates afterwards - a filter-versus-renderer ordering gap rather than a total absence of sanitization. Both the highlighted and non-highlighted rendering paths hit the same unsafe return, so no special configuration is needed; the advisory only uses noHighlight: true to make reproduction deterministic. The underlying weakness is CWE-79, improper neutralization of input during web page generation (cross-site scripting), and it maps to the affected range in the CPE cpe:2.3:a:imzbf:md-editor-v3:*:*:*:*:*:*:*:*. The upstream fix at commit 2c07360420e74087f5bc63032ab155d93e0a0b10 introduces md.utils.escapeHtml(language) and quotes the language attribute; the same commit hardens adjacent surfaces by switching copy-button writes from innerHTML to textContent in useCopyCode.ts and by escaping copy tips and DOM-safe-encoding the editorId used in the codetabs plugin.
Know when Vue 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:N/UI:R/S:C/C:L/I:L/A:N
Network-delivered Markdown, no privileges in the library, victim must render it (UI:R), and script executes in the browser origin outside the parser's control (S:C) with typical XSS C:L/I:L.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
md-editor-v3 is a Markdown editor for Vue 3 developed in JSX and TypeScript. Prior to 6.5.4, MdPreview's useMarkdownIt() highlight callback in packages/MdEditor/layouts/Content/composition/useMarkdownIt.ts inserts a fenced-code language value into class and language HTML attributes without escaping or consistently quoting it. Both highlighted and non-highlighted rendering paths reach this return value, while XSSPlugin filters only existing html_block and html_inline tokens before rendering and therefore cannot inspect the renderer-generated HTML. An attacker who can supply Markdown can use crafted fenced-code metadata to execute JavaScript in the application origin when a victim renders it, including as stored cross-site scripting when the host persists the Markdown. This issue is fixed in version 6.5.4
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Client-side cross-site scripting in @nuxtjs/mdc before 0.22.1 allows attackers to execute arbitrary JavaScript in the pa
OpenC3 COSMOS versions 5.0.6 through 7.2.x contain a stored cross-site scripting flaw in the shared-screen BUTTON widget
EUVD-2026-83198
GHSA-3rm2-h79c-8qw6
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB