Skip to content
Heist/ feed
Back to feed
Medium

Mermaid: Improper sanitization of `classDef` in state diagrams leads to HTML injection

Type: advisorySources: OSV

Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and earlier, as well as 11.0.0-alpha.1 through 11.14.0, are vulnerable to HTML injection under the default configuration. Specifically, the classDef directive in Mermaid state diagrams permits DOM injection that escapes the SVG context. However,

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-41149
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 04:00 UTC · Revision 1

Source evidence

Mermaid: Improper sanitization of `classDef` in state diagrams leads to HTML injection

core-osv · Original source

Published 22 May 2026, 22:34 UTC

Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and earlier, as well as 11.0.0-alpha.1 through 11.14.0, are vulnerable to HTML injection under the default configuration. Specifically, the classDef directive in Mermaid state diagrams permits DOM injection that escapes the SVG context. However,

osv:CVE-2026-41149
Complete source record
{
  "id": "78658e21964ede383679652fb91259ce11e47fb948223987d2fce19cf14ba567",
  "url": "https://osv.dev/vulnerability/CVE-2026-41149",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Mermaid: Improper sanitization of `classDef` in state diagrams leads to HTML injection",
    "summary": "Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and earlier, as well as 11.0.0-alpha.1 through 11.14.0, are vulnerable to HTML injection under the default configuration. Specifically, the classDef directive in Mermaid state diagrams permits DOM injection that escapes the SVG context. However,",
    "evidence": "osv:CVE-2026-41149",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-41149",
      "aliases": [
        "CVE-2026-41149",
        "GHSA-ghcm-xqfw-q4vr"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "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"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/mermaid-js/mermaid",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "41646dfd43ac83f001b03c70605feb036afae46d"
                },
                {
                  "fixed": "dd351a7cef45b70638147a5e000f1ee8bfd35637"
                },
                {
                  "fixed": "37ff937f1da2e19f882fd1db01235db4d01f4056"
                },
                {
                  "fixed": "4e2d512bf5bf6f9de1a8f0a48da78dc4d09ac4f3"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "11.0.0-alpha.1"
                      },
                      {
                        "fixed": "11.15.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "10.9.6"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "37ff937f1da2e19f882fd1db01235db4d01f4056"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "4e2d512bf5bf6f9de1a8f0a48da78dc4d09ac4f3"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "@mermaid-js/parser@1.1.1",
            "@mermaid-js/layout-tidy-tree@0.2.2",
            "mermaid@11.14.0",
            "@mermaid-js/tiny@11.14.0",
            "@mermaid-js/parser@1.1.0",
            "@mermaid-js/examples@1.2.0",
            "v10.9.5",
            "mermaid@11.13.0",
            "@mermaid-js/tiny@11.13.0",
            "@mermaid-js/parser@1.0.1",
            "@mermaid-js/layout-elk@0.2.1",
            "@mermaid-js/examples@1.1.0",
            "mermaid@11.12.3",
            "@mermaid-js/tiny@11.12.3",
            "@mermaid-js/parser@1.0.0",
            "@mermaid-js/layout-tidy-tree@0.2.1",
            "mermaid@11.12.2",
            "mermaid@11.12.1",
            "@mermaid-js/tiny@11.12.1",
            "v10.9.4",
            "@mermaid-js/parser@0.6.3",
            "mermaid@11.12.0",
            "@mermaid-js/tiny@11.12.0",
            "mermaid@11.11.0",
            "@mermaid-js/tiny@11.11.0",
            "@mermaid-js/layout-tidy-tree@0.2.0",
            "@mermaid-js/layout-elk@0.2.0",
            "mermaid@11.10.1",
            "@mermaid-js/tiny@11.10.1",
            "mermaid@11.10.0",
            "@mermaid-js/tiny@11.10.0",
            "@mermaid-js/mermaid-zenuml@0.2.2",
            "@mermaid-js/layout-elk@0.1.9",
            "v10.9.3",
            "mermaid@11.8.1",
            "@mermaid-js/tiny@11.8.1",
            "@mermaid-js/parser@0.6.1",
            "mermaid@11.8.0",
            "@mermaid-js/tiny@11.8.0",
            "@mermaid-js/parser@0.6.0",
            "mermaid@11.7.0",
            "@mermaid-js/tiny@11.7.0",
            "@mermaid-js/parser@0.5.0",
            "@mermaid-js/mermaid-zenuml@0.2.1",
            "@mermaid-js/layout-elk@0.1.8",
            "mermaid@11.6.0",
            "@mermaid-js/parser@0.4.0",
            "mermaid@11.5.0",
            "@mermaid-js/layout-elk@0.1.7",
            "mermaid@11.4.1",
            "@mermaid-js/layout-elk@0.1.6",
            "mermaid@11.4.0",
            "mermaid@11.3.0",
            "@mermaid-js/layout-elk@0.1.5",
            "v10.9.1",
            "v10.9.2",
            "mermaid@11.2.1",
            "@mermaid-js/layout-elk@0.1.4",
            "mermaid@11.2.0",
            "mermaid@11.1.1",
            "mermaid@11.1.0",
            "@mermaid-js/parser@0.3.0",
            "@mermaid-js/layout-elk@0.1.3",
            "@mermaid-js/layout-elk@0.1.2",
            "mermaid@11.0.2",
            "@mermaid-js/parser@0.2.0",
            "@mermaid-js/layout-elk@0.1.1",
            "mermaid@11.0.1",
            "v11.0.0",
            "v10.9.0",
            "v10.7.0",
            "v10.4.0",
            "v10.3.0",
            "v10.1.0",
            "9.1.5",
            "9.1.3",
            "9.1.2",
            "8.13.11",
            "8.13.10",
            "8.13.7",
            "8.13.6",
            "8.13.5",
            "8.12.1",
            "8.11.4",
            "8.11.3",
            "8.11.0-rc2",
            "8.9.3",
            "8.9.1",
            "8.8.3",
            "8.8.0",
            "8.7.0",
            "8.6.2",
            "8.6.0",
            "8.5.2",
            "untagged-566ebfbf21141b604025",
            "8.5.1",
            "untagged-31c93788afe260d914bb",
            "8.4.8",
            "untagged-7651dabb407ecd5631ce",
            "8.4.6",
            "untagged-f43366252632a1a42020",
            "8.4.4",
            "8.2.0",
            "8.3.0",
            "8.2.6",
            "8.2.5",
            "8.2.4",
            "8.2.3",
            "8.2.2",
            "8.1.0",
            "8.2.1",
            "7.0.5",
            "7.0.3",
            "7.0.2",
            "7.0.0",
            "6.0.0",
            "0.5.7",
            "0.5.6",
            "0.5.5",
            "0.5.4",
            "0.5.3",
            "0.5.2",
            "0.5.1",
            "0.5.0",
            "0.4.0",
            "0.3.5",
            "0.3.4",
            "0.3.3",
            "0.3.2",
            "0.3.1",
            "0.3.0",
            "0.2.16",
            "0.2.15",
            "0.2.14",
            "0.2.13",
            "0.2.8",
            "0.2.7",
            "0.2.6",
            "0.2.5",
            "0.2.4",
            "0.2.3",
            "0.2.2",
            "0.2.1",
            "0.2.0",
            "0.1.1",
            "0.1.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-41149.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:49.509162608Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/41xxx/CVE-2026-41149.json",
        "https://github.com/mermaid-js/mermaid/security/advisories/GHSA-ghcm-xqfw-q4vr",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-41149",
        "https://github.com/mermaid-js/mermaid/commit/37ff937f1da2e19f882fd1db01235db4d01f4056",
        "https://github.com/mermaid-js/mermaid/commit/4e2d512bf5bf6f9de1a8f0a48da78dc4d09ac4f3"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-94"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/41xxx/CVE-2026-41149.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-41149",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 517955,
  "published_at": "2026-05-22T22:34:36.944+00:00"
}