Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-23847

CVE-2026-23847: SiYuan Reflected XSS Vulnerability

CVE-2026-23847 is a reflected cross-site scripting flaw in SiYuan affecting versions before 3.5.4. Unsanitized SVG input allows attackers to inject malicious code. This article covers technical details, affected versions, and patches.

Published:

CVE-2026-23847 Overview

SiYuan is a personal knowledge management system that allows users to organize notes, documents, and knowledge bases. A reflected cross-site scripting (XSS) vulnerability has been identified in versions prior to 3.5.4 affecting the /api/icon/getDynamicIcon endpoint. The vulnerability stems from unsanitized SVG input handling, where the content query parameter is inserted directly into SVG <text> tags without proper XML escaping.

Critical Impact

Attackers can inject malicious JavaScript through crafted SVG content, potentially leading to session hijacking, credential theft, or malicious actions performed on behalf of authenticated users.

Affected Products

  • SiYuan versions prior to 3.5.4

Discovery Timeline

  • 2026-01-19 - CVE CVE-2026-23847 published to NVD
  • 2026-01-19 - Last updated in NVD database

Technical Details for CVE-2026-23847

Vulnerability Analysis

This reflected XSS vulnerability occurs in the dynamic icon generation functionality of SiYuan. The /api/icon/getDynamicIcon endpoint creates SVG images for text icons when the type=8 parameter is specified. The core issue lies in how user-supplied content is processed and embedded into the generated SVG response.

When a request is made to this endpoint, the content query parameter value is directly interpolated into the SVG <text> element without any XML character escaping or sanitization. Since the HTTP response is served with Content-Type: image/svg+xml, the browser renders it as XML content. This allows an attacker to craft a malicious payload that breaks out of the intended XML structure by injecting closing tags and arbitrary SVG/HTML elements, including <script> tags that execute JavaScript in the context of the user's session.

Root Cause

The root cause is a classic input validation failure classified as CWE-79 (Improper Neutralization of Input During Web Page Generation). The application fails to properly escape or sanitize user-controlled input before embedding it in dynamically generated SVG content. Special XML characters such as <, >, &, ", and ' are not encoded, allowing attackers to inject arbitrary XML/SVG elements and JavaScript code.

Attack Vector

The attack is network-based and requires user interaction. An attacker must craft a malicious URL containing the XSS payload in the content parameter and trick a victim into clicking the link. When the victim's browser requests the crafted URL, the server generates an SVG response containing the injected script, which executes in the victim's browser context. This can be used to steal session tokens, perform actions as the authenticated user, or redirect users to malicious sites.

go
 	svg = generateTypeOneSVG(color, lang, dateInfo)
 }

+	if !model.Conf.Editor.AllowSVGScript {
+		svg = util.RemoveScriptsInSVG(svg)
+	}
+
 c.Header("Content-Type", "image/svg+xml")
 c.Header("Cache-Control", "no-cache")
 c.Header("Pragma", "no-cache")

Source: GitHub Commit

The patch introduces a script removal function (util.RemoveScriptsInSVG) that sanitizes the generated SVG output when the AllowSVGScript configuration option is disabled (default behavior). This prevents embedded scripts from being included in the SVG response.

Detection Methods for CVE-2026-23847

Indicators of Compromise

  • HTTP requests to /api/icon/getDynamicIcon with type=8 parameter containing suspicious payloads such as <script>, javascript:, or SVG event handlers (onload, onerror)
  • Web server logs showing URL-encoded XSS payloads in the content query parameter
  • Unusual JavaScript execution errors in client-side logs related to icon rendering

Detection Strategies

  • Implement web application firewall (WAF) rules to detect and block requests containing XSS patterns in the content parameter of the /api/icon/getDynamicIcon endpoint
  • Deploy content security policy (CSP) headers to restrict inline script execution
  • Monitor for anomalous requests to the dynamic icon API with large or unusual content parameter values

Monitoring Recommendations

  • Enable detailed logging for all requests to the /api/icon/ endpoint
  • Set up alerts for requests containing HTML/XML tags or JavaScript keywords in query parameters
  • Review access logs for repeated attempts to probe the getDynamicIcon endpoint with varying payloads

How to Mitigate CVE-2026-23847

Immediate Actions Required

  • Upgrade SiYuan to version 3.5.4 or later immediately
  • Review server logs for evidence of exploitation attempts targeting the /api/icon/getDynamicIcon endpoint
  • Implement a Web Application Firewall (WAF) rule to filter malicious content in the content parameter

Patch Information

The vulnerability has been patched in SiYuan version 3.5.4. The fix introduces a script removal mechanism that sanitizes SVG output by default. The patch is controlled by the AllowSVGScript configuration option, which is disabled by default to prevent script execution in generated SVG images.

For detailed information, refer to the GitHub Security Advisory and the commit patch.

Workarounds

  • If immediate upgrade is not possible, consider restricting access to the /api/icon/getDynamicIcon endpoint via network-level controls or reverse proxy rules
  • Implement strict Content Security Policy headers with script-src 'self' to mitigate the impact of successful XSS attacks
  • Deploy a reverse proxy or WAF that performs input sanitization on the content parameter before requests reach the application
bash
# Example nginx location block to restrict access to vulnerable endpoint
location /api/icon/getDynamicIcon {
    # Block requests containing potential XSS payloads
    if ($args ~* "(<|>|script|javascript|onerror|onload)") {
        return 403;
    }
    proxy_pass http://siyuan_backend;
}

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.