Mermaid improperly sanitizes sequence diagram labels leading to XSS
Moderate severity
GitHub Reviewed
Published
Aug 19, 2025
in
mermaid-js/mermaid
•
Updated Sep 4, 2025
Package
Affected versions
>= 11.0.0-alpha.1, < 11.10.0
>= 10.9.0-rc.1, < 10.9.4
Patched versions
11.10.0
10.9.4
Description
Published by the National Vulnerability Database
Aug 19, 2025
Published to the GitHub Advisory Database
Aug 19, 2025
Reviewed
Aug 19, 2025
Last updated
Sep 4, 2025
Summary
In the default configuration of mermaid 11.9.0, user supplied input for sequence diagram labels is passed to
innerHTML
during calculation of element size, causing XSS.Details
Sequence diagram node labels with KaTeX delimiters are passed through
calculateMathMLDimensions
. This method passes the full label toinnerHTML
which allows allows malicious users to inject arbitrary HTML and cause XSS when mermaid-js is used in it's default configuration (with KaTeX support enabled).The vulnerability lies here:
The
calculateMathMLDimensions
method was introduced in 5c69e5fdb004a6d0a2abe97e23d26e223a059832 two years ago, which was released in Mermaid 10.9.0.PoC
Render the following diagram and observe the modified DOM.
Here is a PoC on mermaid.live: https://mermaid.live/edit#pako:eNpVUMtOwzAQ_BWzyoFKaRTyaFILiio4IK7ckA-1km1iKbaLY6spUf4dJ0AF68uOZ2dm7REqXSNQ6PHDoarwWfDGcMkUudaJGysqceLKkj3hPdl3osJ7IRvSm-qBwcCAaIXGaONRrSsnUdnobITF28PQ954lwXglai25UNNhxWAXBMyXxcGOi-3kL_5k79e73atuFSUv2HWazH1IWn0m3CC5aPf4b3p2WK--BW-4DJCOWzQ3TM0HQmiMqIFa4zAEicZv4iGMsw0D26JEBtS3NR656ywDpiYv869_11r-Ko12TQv0yLveI3eqfcjP111HUNVonrRTFuhdsVgAHWEAmuRxlG7SuEzKMi-yJAnhAjTLIk_EcbFJtuk2y9MphM8lM47KIp--AOZghtU
Impact
XSS on all sites that use mermaid and render user supplied diagrams without further sanitization.
Remediation
The value of the
text
argument for thecalculateMathMLDimensions
method needs to be sanitized before getting passed on toinnerHTML
.References