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-63671

CVE-2026-63671: Cross-Site Scripting (XSS) Sanitizer Bypass in @nuxtjs/mdc

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 17, 2026·6 min read·3 visits

Executive Summary (TL;DR)

Unauthenticated XSS vulnerability in @nuxtjs/mdc prior to 0.22.1 allows attackers to bypass URL sanitizers and execute arbitrary scripts via crafted SVG xlink:href attributes and data:text/html URIs.

A cross-site scripting (XSS) vulnerability was identified in @nuxtjs/mdc prior to version 0.22.1. Gaps in the HTML/SVG attribute verification and URL protocol parsing allow unauthenticated remote attackers to bypass the application's sanitization routines. By embedding malicious SVG links or data-encoded iframe elements within Markdown, attackers can execute arbitrary JavaScript in the victim's browser context.

Vulnerability Overview

The @nuxtjs/mdc (Markdown Components) library is a core framework component within the Nuxt content ecosystem. It parses Markdown documents into a Hypertext Abstract Syntax Tree (HAST) and renders them as interactive Vue components. By design, this package supports rich content rendering, including raw HTML processing when configured with default parameters.

This analysis examines CVE-2026-63671, a critical cross-site scripting (XSS) vulnerability residing within the parsing utility layer of @nuxtjs/mdc prior to version 0.22.1. The vulnerability emerges from gaps in the attribute sanitization mechanism, which is designed to identify and neutralize malicious URIs.

The vulnerability allows remote, unauthenticated attackers to bypass default security filters by supplying crafted Markdown elements. Specifically, the sanitizer fails to intercept SVG-specific hyperlink attributes and misinterprets standard URL protocol definitions for data URIs. This results in the insertion of executable scripts directly into the DOM of the rendering web application.

Technical Root Cause Analysis

The primary failure mechanism involves the sanitizer implementation found in src/runtime/parser/utils/props.ts. The implementation defines a validation gatekeeper via the validateProp function. This function restricts security checks to an explicit allowlist of properties, specifically looking for exact matches of href and src.

When the HAST parser processes Scalable Vector Graphics (SVG) structures, it translates XML attributes into standardized Javascript representations. The standard SVG attribute xlink:href is converted into camelCase or lowercase equivalents such as xLinkHref or xlinkhref. Because the pre-patch logic only verified href and src, the xlinkhref attribute bypassed validation entirely and passed raw javascript: payloads straight to the renderer.

The second logical error resides in the isAnchorLinkAllowed function, which determines whether a URI protocol is safe. The parser evaluated incoming strings using a denylist of protocols, checking if url.protocol starts with elements from unsafeLinkPrefix, which included data:text/html. However, standard Web API URL parsing rules resolve the protocol property of any data URI strictly to the string data:.

Consequently, executing url.protocol.startsWith('data:text/html') evaluated to false because 'data:' does not start with 'data:text/html'. This logic flaw allowed arbitrary data-encoded payload delivery using the data:text/html media type. The vulnerability constitutes an incomplete input validation weakness classified under CWE-184 and CWE-79.

Vulnerable vs. Patched Code Walkthrough

The logic within src/runtime/parser/utils/props.ts can be analyzed to understand the precise mechanics of the security patch. The pre-patch validation structure relied on strict string equality checks against a limited subset of HTML attributes, leaving SVG specifications unprotected.

Below is a comparison highlighting the changes implemented in the official patch:

// PRE-PATCH IMPLEMENTATION
export const validateProp = (attribute: string, value: string) => {
  if (attribute === 'href' || attribute === 'src') {
    return isAnchorLinkAllowed(value)
  }
}
 
function isAnchorLinkAllowed(value: string) {
  // ...
  if (unsafeLinkPrefix.some(prefix => url.protocol.toLowerCase().startsWith(prefix))) {
    return false
  }
  // ...
}

The remediation, introduced in commit 61d636c2983f021288e4fc5c4006733b38cf0d53, modified the validation scope and structural validation rules:

// POST-PATCH IMPLEMENTATION
export const validateProp = (attribute: string, value: string) => {
  // Added explicit validation for 'xlinkhref' to cover SVG hyperlinks
  if (attribute === 'href' || attribute === 'src' || attribute === 'xlinkhref') {
    return isAnchorLinkAllowed(value)
  }
}
 
function isAnchorLinkAllowed(value: string) {
  // ...
  // Changed verification from 'url.protocol' to the full serialized 'url.href'
  if (unsafeLinkPrefix.some(prefix => url.href.toLowerCase().startsWith(prefix))) {
    return false
  }
  // ...
}

The patch replaces the protocol checking mechanism with a prefix match against the fully qualified URL string (url.href). This guarantees that string sequences matching data:text/html are correctly blocked. Additionally, explicit support for matching the xlinkhref attribute was introduced to cover the vulnerability in SVG elements.

Attack Methodology & Proof-of-Concept Analysis

Exploitation of CVE-2026-63671 requires feeding a malicious Markdown payload to the @nuxtjs/mdc parser. The parser must render the input inside an application context where HTML rendering is active.

The attack path is visualized below:

To execute the SVG vector, the attacker provides a nested SVG element inside the markdown payload. When parsed, this bypasses the standard href validation gate and places a dangerous link in the browser DOM.

<svg viewBox="0 0 10 10">
  <a xlink:href="javascript:alert(document.domain)">click here</a>
</svg>

Alternatively, the attacker can leverage the iframe vector to deliver an interactive payload that runs in a nested context. The validator processes the src attribute but fails to identify the data protocol bypass.

<iframe src="data:text/html,<script>alert(document.cookie)</script>"></iframe>

Empirical Impact Assessment

The execution of arbitrary script content within the context of a victim session yields severe consequences. Because @nuxtjs/mdc renders content directly into the host Nuxt application, an injected script executes with the full privileges of the application origin.

Attackers can capture sensitive session variables, access local storage or session storage tokens, and hijack active application sessions. In environments handling authenticated transactions, this vulnerability permits unauthenticated state changes on behalf of the user.

The CVSS v3.1 score of 8.1 reflects a high threat profile. Since exploitation requires minimal user interaction and low complexity, automated exploits can be deployed via malicious markdown uploads or comment fields.

Remediation & Defensive Defenses

The primary mitigation step is updating @nuxtjs/mdc to version 0.22.1 or later. This upgrade addresses both the SVG attribute parsing gap and the data protocol verification failure.

Applications that cannot immediately deploy the dependency update should disable rendering of dangerous inline HTML. This can be achieved by setting the allowDangerousHtml option to false in the markdown parser configuration interface.

Furthermore, security teams should implement a Content Security Policy (CSP) to mitigate downstream impact. A robust CSP restricting script-src directives prevents the execution of inline scripts and unauthorized data URIs even if a sanitizer bypass occurs.

Official Patches

nuxt-contentFix commit in @nuxtjs/mdc repo

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N

Affected Systems

@nuxtjs/mdc prior to version 0.22.1Nuxt Content projects relying on vulnerable parser dependencies

Affected Versions Detail

Product
Affected Versions
Fixed Version
@nuxtjs/mdc
nuxt-content
< 0.22.10.22.1
AttributeDetail
CWE IDCWE-79, CWE-184
Attack VectorNetwork
CVSS v3.1 Score8.1
Exploit Statuspoc
KEV StatusNot listed
ImpactCross-Site Scripting (XSS)

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')

The product does not sanitize or incorrectly sanitizes user-controlled input before including it in output which is served as web content.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory with technical description of vector bypasses

Vulnerability Timeline

Vulnerability discovered, addressed via commit 61d636c
2026-03-01
Release of version 0.22.1 containing the security fix
2026-03-01
Advisory GHSA-mxm6-v9r6-r94c published
2026-03-01

References & Sources

  • [1]GitHub Security Advisory GHSA-mxm6-v9r6-r94c
  • [2]Official Fix Commit
  • [3]Pull Request #491
  • [4]Release Tag v0.22.1
  • [5]CVE Record

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

•11 minutes ago•CVE-2026-63128
7.5

CVE-2026-63128: Uncontrolled Resource Consumption in Model Context Protocol Rust SDK (rmcp)

CVE-2026-63128 is a high-severity uncontrolled resource consumption vulnerability in the Model Context Protocol (MCP) official Rust SDK (the rmcp crate) prior to version 2.0.0. An unauthenticated attacker can exploit this vulnerability by sending malformed or mismatching handshake requests to the stateful Streamable HTTP server, causing persistent memory allocation without cleanup. This results in an unbounded memory leak and lock contention that ultimately leads to complete denial of service.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 2 hours ago•CVE-2026-58657
6.5

CVE-2026-58657: Stored CSS Injection in Grav CMS Media Resize Parser

CVE-2026-58657 is a critical stored CSS injection vulnerability in Grav CMS's media processing pipeline. By exploiting improper sanitization of image dimensions in the resize helper, low-privileged users with page editing permissions can inject arbitrary CSS styles. This can lead to visual defacement, UI redressing, and indirect data exfiltration.

Alon Barad
Alon Barad
2 views•4 min read
•about 3 hours ago•CVE-2026-61709
5.3

CVE-2026-61709: Improper Policy Enforcement and Exclusion Bypass in OpenFGA ListUsers API

An authorization-decision over-inclusion vulnerability exists in the OpenFGA authorization engine. The flaw manifests within the `ListUsers` API evaluation path when evaluating complex relationship intersections containing exclusions. Under certain configurations involving wildcards, the exclusion is bypassed, leading to incorrect permission lists.

Alon Barad
Alon Barad
8 views•7 min read
•about 4 hours ago•CVE-2026-61594
9.1

CVE-2026-61594: Authorization Bypass on WebSocket and SSE Mount Paths in djust

An authorization bypass vulnerability exists in the djust framework (djust-org/djust) prior to version 1.0.7. The framework fails to enforce standard Django view-level authorization mechanisms, such as AccessMixins or dispatch decorators, when mounting reactive views over stateful transport layers (WebSockets and Server-Sent Events). Unauthenticated or low-privileged attackers can establish persistent connections to mount arbitrary protected views and execute state-changing event handlers.

Amit Schendel
Amit Schendel
8 views•7 min read
•about 5 hours ago•CVE-2026-61560
9.8

CVE-2026-61560: Unauthenticated Remote Path Traversal and Access Token Exfiltration in @zereight/mcp-gitlab

CVE-2026-61560 is a critical security vulnerability in the @zereight/mcp-gitlab Server-Sent Events (SSE) server. By utilizing default, unauthenticated route setups and exposing vulnerable administrative tools, remote attackers can execute path traversal attacks to read internal process variables and hijack GitLab operations.

Amit Schendel
Amit Schendel
4 views•8 min read
•about 6 hours ago•CVE-2026-61590
7.4

CVE-2026-61590: Network-Exposed Observability Endpoints and Remote Method-Invocation in djust

A critical access control vulnerability in djust prior to 1.0.7 exposes diagnostic endpoints and remote method-invocation capabilities to unauthorized network actors. The vulnerability arises due to decoupling IP boundary validation into an opt-in middleware that was omitted from official configuration documentation, leaving views to rely solely on the status of Django's DEBUG flag.

Alon Barad
Alon Barad
5 views•7 min read