Listen to this Post
This vulnerability arises from insufficient sanitization of interactive attributes within GraphViz diagram definitions processed by PlantUML. When PlantUML generates SVG output from a crafted diagram, it improperly handles user-supplied input for attributes like “URL” or “tooltip” in GraphViz nodes or edges. An attacker can embed malicious JavaScript payloads within these attributes. During diagram rendering, the unsanitized input is directly included in the final SVG code. Since SVG supports interactive elements and scripts, the injected JavaScript executes in the context of the web application displaying the SVG. This constitutes a Stored Cross-Site Scripting (XSS) attack, as the malicious diagram is saved (e.g., in documentation or wikis) and subsequently viewed by victims. The vulnerability specifically affects the library’s processing pipeline where GraphViz dot language is converted to SVG, bypassing output encoding routines that should neutralize HTML/JS metacharacters.
Platform: PlantUML
Version: < 1.2026.0
Vulnerability: Stored XSS
Severity: Low
date: Jan 16 2026
Prediction: Patched Jan 2026
What Undercode Say:
Analytics
Check PlantUML version in a project
find . -name ".jar" -exec sh -c 'jar tf {} | grep -i plantuml && echo "Found in: {}"' \;
grep -r "net.sourceforge.plantuml" pom.xml build.gradle
Example malicious PlantUML/GraphViz code for testing
echo '@startdot
digraph G {
node [URL="javascript:alert(document.domain)"]
A
}
@enddot' > test.puml
plantuml test.puml
How Exploit:
Craft a PlantUML diagram file with GraphViz syntax containing interactive attributes like `URL=”javascript:maliciousCode()”` or tooltip="<script>alert(1)</script>". Embed this diagram in a system that uses PlantUML to render SVGs (e.g., Confluence, Markdown viewers). When a user views the rendered SVG, the script executes in their browser session.
Protection from this CVE
Update to PlantUML version 1.2026.0 or later. Implement strict content security policies (CSP) that restrict script execution in SVGs. Sanitize all user input before passing to PlantUML rendering functions.
Impact:
Arbitrary JavaScript execution in victim’s browser, potentially leading to session hijacking, data theft, or application compromise.
🎯Let’s Practice Exploiting & Learn Patching For Free:
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

