@nuxtjs/mdc converts untrusted Markdown, including raw HTML, into a Vue component tree. parseMarkdown enables allowDangerousHtml by default, making the attribute and URL sanitizer the primary control before content is rendered.
validateProp checks schemes only for attributes named exactly href or src. An SVG xlink:href value is represented as xLinkHref, bypasses that check, and is later mapped by the renderer back to the xlink:href attribute. A javascript: URL can therefore survive and run in the page origin when the user selects the link.
- The denylist contains entries such as
data:text/html, but the vulnerable code compares them with url.protocol, while the protocol of every data URI is only data:. An iframe with a src containing data:text/html can therefore pass sanitization and execute script when loaded in an opaque origin.
The attacker-controlled input is untrusted Markdown that the application sends to the parser. Ordinary href values containing javascript:, as well as srcdoc, object, script, and base, are already blocked, so this issue consists of two specific sanitizer gaps. The record identifies network reachability and no required privileges, but a deployment must still render content controlled by an attacker for the vulnerable path to apply.