5.3 MEDIUM
- CVSS version (CVSS): 4.0
- Attack Vector (AV): Network (N)
- Attack Complexity (AC): Low (L)
- Attack Requirement (AT): None (N)
- Privileges Required (PR): None (N)
- User Interaction (UI): Passive (P)
- Vulnerable System Impact Confidentiality (VC): None (N)
- Vulnerable System Impact Integrity (VI): Low (L)
- Vulnerable System Impact Availability (VA): None (N)
- Subsequent System Impact Confidentiality (SC): Low (L)
- Subsequent System Impact Integrity (SI): Low (L)
- Subsequent System Impact Availability (SA): Low (L)
- Modified Attack Vector (MAV): Network (N)
- Modified Attack Complexity (MAC): Low (L)
- Modified Attack Requirement (MAT): None (N)
- Modified Privileges Required (MPR): None (N)
- Modified User Interaction (MUI): Passive (P)
- Modified Vulnerable System Impact Confidentiality (MVC): None (N)
- Modified Vulnerable System Impact Integrity (MVI): Low (L)
- Modified Vulnerable System Impact Availability (MVA): None (N)
- Modified Subsequent System Impact Confidentiality (MSC): Low (L)
- Modified Subsequent System Impact Integrity (MSI): Low (L)
- Modified Subsequent System Impact Availability (MSA): Low (L)
- Safety (S): Not Defined (X)
- Automatable (AU): Not Defined (X)
- Recovery (R): Not Defined (X)
- Value Density (V): Not Defined (X)
- Vulnerability Response Effort (RE): Not Defined (X)
- Provider Urgency (U): Not Defined (X)
- Confidentiality Req. (CR): Not Defined (X)
- Integrity Req. (IR): Not Defined (X)
- Availability Req. (AR): Not Defined (X)
- Exploit Maturity (E): Not Defined (X)
Activity log
- Created suggestion
Mermaid: Improper sanitization of `classDefs` in diagrams leads to CSS injection
Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and prior, in addition to 11.0.0-alpha.1 through 11.12.0 are vulnerable to CSS injection through improper sanitization. The state diagram (and any other diagram type that routes user-controlled style strings through the createCssStyles parser) captures classDef values using an unrestricted regex that matches everything up to a newline. That value then flows unsanitized through addStyleClass() into createCssStyles() and is assigned to style.innerHTML, so a closing brace (}) in the value terminates the generated CSS selector and turns everything after it into a new CSS rule on the page. This enables page defacement, user tracking via url() callbacks, and DOM attribute exfiltration. This issue has been fixed in versions 10.9.6 and 11.15.0. If developers are unable to immediately upgrade, they can work around this issue by setting "securityLevel": "sandbox", which prevents the issue by rendering the mermaid diagram in a sandboxed <iframe>.
References
-
https://github.com/mermaid-js/mermaid/security/advisories/GHSA-xcj9-5m2h-648r x_refsource_CONFIRM
-
https://github.com/mermaid-js/mermaid/releases/tag/mermaid%4011.15.0 x_refsource_MISC
-
https://github.com/mermaid-js/mermaid/releases/tag/v10.9.6 x_refsource_MISC
-
https://mermaid.js.org/config/schema-docs/config.html#securitylevel x_refsource_MISC
Affected products
- ==>= 11.0.0-alpha.1, < 11.15.0
- ==< 10.9.6
Matching in nixpkgs
pkgs.mermaid-cli
Generation of diagrams from text in a similar manner as markdown
pkgs.mdbook-mermaid
Preprocessor for mdbook to add mermaid.js support
pkgs.mermaid-filter
Pandoc filter for creating diagrams in mermaid syntax blocks in markdown docs
pkgs.python312Packages.sphinxcontrib-mermaid
Mermaid diagrams in yours sphinx powered docs
pkgs.python313Packages.sphinxcontrib-mermaid
Mermaid diagrams in yours sphinx powered docs
pkgs.python314Packages.sphinxcontrib-mermaid
Mermaid diagrams in yours sphinx powered docs
pkgs.python312Packages.mkdocs-mermaid2-plugin
MkDocs plugin for including mermaid graphs in markdown sources
-
nixos-25.11 mermaid2-plugin-1.2.3
- nixos-25.11-small mermaid2-plugin-1.2.3
- nixpkgs-25.11-darwin mermaid2-plugin-1.2.3
pkgs.python313Packages.mkdocs-mermaid2-plugin
MkDocs plugin for including mermaid graphs in markdown sources
-
nixos-unstable mermaid2-plugin-1.2.3
- nixpkgs-unstable mermaid2-plugin-1.2.3
- nixos-unstable-small mermaid2-plugin-1.2.3
-
nixos-25.11 mermaid2-plugin-1.2.3
- nixos-25.11-small mermaid2-plugin-1.2.3
- nixpkgs-25.11-darwin mermaid2-plugin-1.2.3
pkgs.python314Packages.mkdocs-mermaid2-plugin
MkDocs plugin for including mermaid graphs in markdown sources
-
nixos-unstable mermaid2-plugin-1.2.3
- nixpkgs-unstable mermaid2-plugin-1.2.3
- nixos-unstable-small mermaid2-plugin-1.2.3
pkgs.tree-sitter-grammars.tree-sitter-mermaid
Tree-sitter grammar for mermaid
-
nixos-unstable 0-unstable-2024-04-22
- nixpkgs-unstable 0-unstable-2024-04-22
- nixos-unstable-small 0-unstable-2024-04-22
pkgs.vimPlugins.nvim-treesitter-parsers.mermaid
Tree-sitter grammar for mermaid
-
nixos-unstable 0.0.0+rev=90ae195
- nixpkgs-unstable 0.0.0+rev=90ae195
- nixos-unstable-small 0.0.0+rev=90ae195
pkgs.vscode-extensions.bierner.markdown-mermaid
Adds Mermaid diagram and flowchart support to VS Code's builtin markdown preview
pkgs.python313Packages.tree-sitter-grammars.tree-sitter-mermaid
Python bindings for tree-sitter-mermaid
-
nixos-unstable 0+unstable20240422
- nixpkgs-unstable 0+unstable20240422
- nixos-unstable-small 0+unstable20240422
pkgs.python314Packages.tree-sitter-grammars.tree-sitter-mermaid
Python bindings for tree-sitter-mermaid
-
nixos-unstable 0+unstable20240422
- nixpkgs-unstable 0+unstable20240422
- nixos-unstable-small 0+unstable20240422
Package maintainers
-
@xrelkd xrelkd
-
@matthiasbeyer Matthias Beyer <mail@beyermatthias.de>
-
@ysndr Yannik Sander <me@ysndr.de>
-
@ners ners <ners@gmx.ch>
-
@adfaure Adrien Faure <adfaure@pm.me>
-
@stepbrobd Yifei Sun <ysun@hey.com>
-
@A-jay98 Ali Jamadi <ali@jamadi.me>
-
@mightyiam Shahar "Dawn" Or <mightyiampresence@gmail.com>
-
@aciceri Andrea Ciceri <andrea.ciceri@autistici.org>