GitHub Advisoryadvisory · npm
GHSA-xcj9-5m2h-648r Mermaid: Improper sanitization of `classDefs` in diagrams leads to CSS injection
MEDIUM
Official page ↗
- Aliases
- CVE-2026-41148
- Ecosystem
- npm
- Packages
- mermaid
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:L
- Weaknesses
- CWE-94
- Reviewed
- 2026-05-11
Affected packages
• npm mermaid: >= 11.0.0-alpha.1, < 11.15.0 → fixed in 11.15.0
• npm mermaid: < 10.9.6 → fixed in 10.9.6
Description
Details
The state diagram and any other diagram type that routes user-controlled style strings through createCssStyles parser for Mermaid v11.14.0 and earlier captures `classDef` values with an unrestricted regex:
```jison
// packages/mermaid/src/diagrams/state/parser/stateDiagram.jison:83
[^\n]* { this.popState(); return 'CLASSDEF_STYLEOPTS' }
```
The value passes unsanitized through `addStyleClass()` -> `createCssStyles()` -> `style.innerHTML` (mermaidAPI.ts:418). A `}` in the value closes the generated CSS selector, and everything after becomes a new CSS rule on the page.
PoC
```
stateDiagram-v2
classDef x }*{ background-image: url("http://media.giphy.com/media/SggILpMXO7Xt6/giphy.gif")}
```
Live demo:
Patches
This has been patched in:
• v11.15.0 (see e9b0f34d8d82a6260077764ee45e1d7d90957a0f)
• v10.9.6 (see 8fead23c59166b7bab6a39eac81acebee2859102)
Workarounds
Setting `"securityLevel": "sandbox"` will prevent this, by rendering the mermaid diagram in a sandboxed ``.
Impact
Enables page defacement, user tracking via `url()` callbacks, and DOM attribute exfiltration via CSS `:has()` selectors.
Related
Alias · CVE (1)
- CVE-2026-41148 Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. vulnerability
Weakness · CWE (1)
- CWE-94 Improper Control of Generation of Code weakness
References
- https://github.com/mermaid-js/mermaid/security/advisories/GHSA-xcj9-5m2h-648r web
- https://nvd.nist.gov/vuln/detail/CVE-2026-41148 advisory
- https://github.com/mermaid-js/mermaid/commit/8fead23c59166b7bab6a39eac81acebee2859102 web
- https://github.com/mermaid-js/mermaid/commit/e9b0f34d8d82a6260077764ee45e1d7d90957a0f web
- https://github.com/mermaid-js/mermaid package
- https://github.com/mermaid-js/mermaid/releases/tag/mermaid%4011.15.0 web
- https://github.com/mermaid-js/mermaid/releases/tag/v10.9.6 web
- https://mermaid.js.org/config/schema-docs/config.html#securitylevel web