CVE-2026-63671
largeSanitizer bypass XSS in Nuxt Markdown-to-Vue module (@nuxtjs/mdc)
Versions of @nuxtjs/mdc, the Nuxt module that renders Markdown interleaved with Vue components, before 0.22.1 incompletely sanitize untrusted Markdown: parseMarkdown runs with allowDangerousHtml enabled by default, and the validateProps/validateProp/unsafeLinkPrefix helpers strip executable URLs only from attributes literally named href or src. An attacker who can inject Markdown can abuse an SVG link whose camelCase xLinkHref attribute retains a javascript: URL, which executes in the page origin when a victim clicks it, and can also set an iframe src to a data:text/html URL that the denylist misses (because it compares against url.protocol, which is only 'data:') and which executes attacker-controlled HTML on page load in an opaque origin. Successful exploitation gives the attacker script execution in the victim's browser session in the application's origin, enabling cookie/token theft and unauthorized actions (CVSS 8.1 high). Any Nuxt application using @nuxtjs/mdc to render Markdown supplied by users or less-trusted CMS sources is affected. No public proof-of-concept or in-the-wild exploitation is known, and the issue is not listed in CISA KEV.
What to do: Upgrade @nuxtjs/mdc to version 0.22.1 or later. Until upgraded, do not render untrusted Markdown with the module, or pre-sanitize incoming Markdown to strip javascript: URLs (including SVG xLinkHref attributes) and data:text/html iframe src values. Audit Nuxt applications that accept Markdown from end users or third-party CMS content as the highest-priority targets for patching.
| Nuxt (nuxt-modules / NuxtLabs) @nuxtjs/mdc (Nuxt MDC Markdown module) | All versions prior to 0.22.1 (fixed in 0.22.1) |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
MDC is a tool to take regular Markdown and write documents interacting deeply with a Vue component. Prior to 0.22.1, @nuxtjs/mdc uses parseMarkdown with allowDangerousHtml enabled by default and relies on validateProps, validateProp, and unsafeLinkPrefix to remove executable URLs from untrusted Markdown. validateProp checks only attributes named href or src, allowing an SVG xlink:href value represented as xLinkHref to retain a javascript: URL that executes in the page origin when selected. The data:text/html denylist entries are also compared against url.protocol, which is only data:, so an iframe src containing data:text/html survives sanitization and executes in an opaque origin when loaded. Plain href javascript: URLs, srcdoc, object, script, and base elements are already blocked, making these two paths specific sibling gaps in the sanitizer. This issue is fixed in version 0.22.1.
- Ecosystems
- npm
- Weakness
- CWE-79, CWE-184
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
- GHSA
- GHSA-mxm6-v9r6-r94c (high)
In the news0 stories
No ingested article mentions this CVE yet.