CVE-2026-81753: Flowintel Stored XSS in Case Notes via Malicious Mermaid Diagram Content
Affected versions of Flowintel render Mermaid blocks contained in stored case notes without sufficiently neutralizing attacker-controlled markup. Because Mermaid note content is persisted and later rendered for other users, an attacker with permission to create or edit a note could store a crafted Mermaid payload that results in JavaScript execution when another user views the affected case note.
The patch adds explicit Mermaid detection and HTML escaping around the token content before the generated Mermaid wrapper is returned. It also moves the wrapping logic earlier in page initialization so Markdown instances are protected consistently.
Version impacted >= 3.3.0
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Flowintelto a version that resolves this vulnerability.Fixed in 3.3.0 - Compensating control
Ensure Mermaid note content is explicitly detected and HTML-escaped (escape around the token content before returning the generated Mermaid wrapper) to prevent stored XSS when case notes are rendered for other users.
Event History
Frequently Asked Questions
Who is exposed to this issue?
Flowintel instances running version 3.3.0 or later are affected. Users who view case notes containing attacker-controlled Mermaid blocks may be exposed to JavaScript execution in their browser.
What access does an attacker need to exploit it?
An attacker needs permission to create or edit a case note and must be able to place crafted content in a Mermaid block. Exploitation occurs later when another user views the affected note.
How can I tell whether a case note may be malicious?
Review stored case notes for Mermaid blocks, particularly notes created or edited by users who could have inserted untrusted diagram content. A crafted payload may execute only when the note is rendered for a viewer.
What changes address the issue?
The patch explicitly detects Mermaid content, HTML-escapes its token content before generating the Mermaid wrapper, and applies the wrapping logic earlier during page initialization so Markdown instances are protected consistently.