Impact
The vulnerability stems from TinaCMS's rich‑text parsing and default link/image rendering, which, in versions before @tinacms/mdx 2.1.7 and tinacms 3.9.3, do not sanitize the URL field on Slate link and image nodes. Input containing javascript: or data:text/html URLs—including case‑variant, whitespace‑padded, and control‑character‑obfuscated forms—is rendered into href or src attributes and executed when the content is viewed, enabling stored XSS. Any actor able to author rich‑text content, such as lower‑privileged editors or imported/external content, can inject these malicious URLs and compromise editors and site viewers. The flaw is a classic stored XSS (CWE‑79) and involves unsafe handling of protocol schemes (CWE‑87).
Affected Systems
The issue affects installations of the open‑source TinaCMS headless CMS and its @tinacms/mdx component prior to version 2.1.7 and tinacms 3.9.3. Users who can author or import rich‑text content, including lower‑privileged editors, are able to inject the malicious URLs.
Risk and Exploitability
The vulnerability receives a moderate CVSS score of 4.8 and an EPSS score of < 1%, indicating a very low but non‑zero likelihood of exploitation. It is not listed in CISA’s KEV catalog. The flaw, a classic stored XSS (CWE‑79) and involving unsafe protocol handling (CWE‑87), can be triggered by inserting malicious URLs into rich‑text fields, requiring write access to content. Once injected, the payload runs in the browsers of any editor or end user who views the affected page.
OpenCVE Enrichment
Github GHSA