Skip to content

Conversation

renovate[bot]
Copy link

@renovate renovate bot commented Aug 24, 2025

This PR contains the following updates:

Package Type Update Change OpenSSF
mermaid devDependencies minor 11.3.0 -> 11.10.0 OpenSSF Scorecard

GitHub Vulnerability Alerts

CVE-2025-54880

Summary

In the default configuration of mermaid 11.9.0, user supplied input for architecture diagram icons is passed to the d3 html() method, creating a sink for cross site scripting.

Details

Architecture diagram service iconText values are passed to the d3 html() method, allowing malicious users to inject arbitrary HTML and cause XSS when mermaid-js is used in it's default configuration.

The vulnerability lies here:

export const drawServices = async function (
  db: ArchitectureDB,
  elem: D3Element,
  services: ArchitectureService[]
): Promise<number> {
  for (const service of services) {
    /** ... **/
    } else if (service.iconText) {
      bkgElem.html(
        `<g>${await getIconSVG('blank', { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}</g>`
      );
      const textElemContainer = bkgElem.append('g');
      const fo = textElemContainer
        .append('foreignObject')
        .attr('width', iconSize)
        .attr('height', iconSize);
      const divElem = fo
        .append('div')
        .attr('class', 'node-icon-text')
        .attr('style', `height: ${iconSize}px;`)
        .append('div')
        .html(service.iconText); // <- iconText passed into innerHTML
       /** ... **/
};
};

This issue was introduced with 734bde38777c9190a5a72e96421c83424442d4e4, around 15 months ago, which was released in v11.1.0.

PoC

Render the following diagram and observe the modified DOM.

architecture-beta
    group api(cloud)[API]
    service db "<img src=x onerror=\"document.write(`xss on ${document.domain}`)\">" [Database] in api

Here is a PoC on mermaid.live: https://mermaid.live/edit#pako:eNo9T8FOwzAM_ZXI4rBJpWrpRtuIISF24caZZdKyxOsiLUnlJjCo-u9kQ8wX-_n5-dkjKK8ROEhSRxNQhUh4v8cghWMpOvKxZ7I3M3XyUc83L-9v2z9qQPo0CpneMwFPxnZsILU6M--QyNNKCAHaq2jRhfyL0vLZ7jwMiWd3443Q3krjpt38Mv4sgG3WMsi9HHDLjLs4CwcZdGQ08EARM7BISZMgjJdLBIQjWhTAU6nxIOMpCBBuSrJeug_v7b8yPdMdgR_kaUgo9loGXBvZkbS3LqHTSK8-ugC8LMrrEuAjnIEvlnlVL9q6rZu6Lh-rRQbfwKuyyZuybcvqIaWiqKcMfq6uRd7Uy-kXhYFzcA

Impact

XSS on all sites that use mermaid and render user supplied diagrams without further sanitization.

Remediation

Sanitize the value of iconText before passing it to html().

CVE-2025-54881

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 to innerHTML 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:

export const calculateMathMLDimensions = async (text: string, config: MermaidConfig) => {
  text = await renderKatex(text, config);
  const divElem = document.createElement('div');
  divElem.innerHTML = text; // XSS sink, text has not been sanitized.
  divElem.id = 'katex-temp';
  divElem.style.visibility = 'hidden';
  divElem.style.position = 'absolute';
  divElem.style.top = '0';
  const body = document.querySelector('body');
  body?.insertAdjacentElement('beforeend', divElem);
  const dim = { width: divElem.clientWidth, height: divElem.clientHeight };
  divElem.remove();
  return dim;
};

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.

sequenceDiagram
    participant A as Alice<img src="x" onerror="document.write(`xss on ${document.domain}`)">$$\\text{Alice}$$
    A->>John: Hello John, how are you?
    Alice-)John: See you later!

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 the calculateMathMLDimensions method needs to be sanitized before getting passed on to innerHTML.


Release Notes

mermaid-js/mermaid (mermaid)

v11.10.0

Compare Source

Minor Changes
Patch Changes

v11.9.0

Compare Source

Minor Changes
  • #​6453 5acbd7e Thanks @​sidharthv96! - feat: Add getRegisteredDiagramsMetadata to mermaid, which returns all the registered diagram IDs in mermaid
Patch Changes

v11.8.1

Compare Source

Patch Changes

v11.8.0

Compare Source

Minor Changes
Patch Changes

v11.7.0

Compare Source

Minor Changes
Patch Changes

v11.6.0

Compare Source

Minor Changes
  • #​6408 ad65313 Thanks @​ashishjain0512! - fix: restore curve type configuration functionality for flowcharts. This fixes the issue where curve type settings were not being applied when configured through any of the following methods:

    • Config
    • Init directive (%%{ init: { 'flowchart': { 'curve': '...' } } }%%)
    • LinkStyle command (linkStyle default interpolate ...)
  • #​6381 95d73bc Thanks @​thomascizeron! - Add Radar Chart

Patch Changes

v11.5.0

Compare Source

Minor Changes
  • #​6187 7809b5a Thanks @​ashishjain0512! - Flowchart new syntax for node metadata bugs

    • Incorrect label mapping for nodes when using &
    • Syntax error when } with trailing spaces before new line
  • #​6136 ec0d9c3 Thanks @​knsv! - Adding support for animation of flowchart edges

  • #​6373 05bdf0e Thanks @​ashishjain0512! - Upgrade Requirement and ER diagram to use the common renderer flow

    • Added support for directions
    • Added support for hand drawn look
  • #​6371 4d25cab Thanks @​knsv! - The arrowhead color should match the color of the edge. Creates a unique clone of the arrow marker with the appropriate color.

Patch Changes

v11.4.1

Compare Source

Patch Changes
  • #​6059 01b5079 Thanks @​knsv! - fix: Kanban diagrams will not render when adding a number as ticket id or assigned for a task

  • #​6038 1388662 Thanks @​knsv! - fix: Intersection calculations for tilted cylinder/DAS when using handdrawn look. Some random seeds could cause the calculations to break.

  • #​6079 fe3cffb Thanks @​aloisklink! - Bump dompurify to ^3.2.1. This removes the need for @types/dompurify.

v11.4.0

Compare Source

Minor Changes
  • #​5999 742ad7c Thanks @​knsv! - Adding Kanban board, a new diagram type

  • #​5880 bdf145f Thanks @​yari-dewalt! - Class diagram changes:

    • Updates the class diagram to the new unified way of rendering.
    • Includes a new "classBox" shape to be used in diagrams
    • Other updates such as:
      • the option to hide the empty members box in class diagrams,
      • support for handDrawn look,
      • the introduction of the classDef statement into class diagrams,
      • support for styling the default class,
      • support lollipop interfaces.
    • Includes fixes / additions for #​5562 #​3139 and #​4037
Patch Changes

Configuration

📅 Schedule: Branch creation - "" in timezone Europe/Berlin, Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/docs-npm-mermaid-vulnerability branch from 96060d2 to 40c037c Compare September 1, 2025 14:54
@renovate renovate bot force-pushed the renovate/docs-npm-mermaid-vulnerability branch from 40c037c to a999dd7 Compare September 26, 2025 07:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant