SiYuan has a Reflected Cross-Site Scripting (XSS) via /api/icon/getDynamicIcon
🔗 CVE IDs covered (1)
📋 Description
Summary
Reflected XSS in /api/icon/getDynamicIcon due to unsanitized SVG input.
Details
The endpoint generates SVG images for text icons (type=8). The content query parameter is inserted directly into the SVG tag without XML escaping. Since the response Content-Type is image/svg+xml, injecting unescaped tags allows breaking the XML structure and executing JavaScript.
PoC
Payload: test</text><script>alert(window.origin)</script><text>
-
Open any note and click Change Icon -> Dynamic (Text).
-
Change color and paste the payload into the Custom field and click on this icon.
-
Intercept and send the request or get path from devtools
- The JavaScript payload executes afted open URL.
Impact
Arbitrary JavaScript execution in the user's session context if the SVG is loaded directly. It also prevents using legitimate characters like < or > in icon text.
Note
Tested version:
🎯 Affected products1
- go/github.com/siyuan-note/siyuan/kernel:< 0.0.0-20260118021606-5c0cc375b475
🔗 References (5)
- https://github.com/siyuan-note/siyuan/security/advisories/GHSA-w836-5gpm-7r93
- https://nvd.nist.gov/vuln/detail/CVE-2026-23847
- https://github.com/siyuan-note/siyuan/issues/16844
- https://github.com/siyuan-note/siyuan/commit/5c0cc375b47567e15edd2119066b09bb0aa18777
- https://github.com/advisories/GHSA-w836-5gpm-7r93