CVE-2026-93922 Overview
CVE-2026-93922 is a stored cross-site scripting (XSS) vulnerability in SiYuan, an open-source personal knowledge management application, affecting all versions through 3.8.4. The Daily Note picker dialog renders notebook names as raw HTML without escaping, allowing attacker-controlled payloads to execute inside the Electron renderer. Because the renderer has Node.js integration enabled, injected JavaScript can invoke operating system commands. The flaw is tracked under [CWE-79] and documented in GHSA-8c2m-33v9-vvqm.
Critical Impact
Stored XSS in an Electron renderer with Node.js access escalates to arbitrary operating system command execution when a user opens the Daily Note picker.
Affected Products
- SiYuan desktop (Electron) versions through 3.8.4
- SiYuan notebook rendering component (app/src/util/mount.ts)
- SiYuan kernel file model (kernel/model/file.go)
Discovery Timeline
- 2026-09-19 - CVE-2026-93922 published to NVD
- 2026-09-22 - Last updated in NVD database
Technical Details for CVE-2026-93922
Vulnerability Analysis
SiYuan stores user-defined notebook names and renders them into the Daily Note picker dialog without HTML entity encoding. When the picker builds its option list, notebook name strings are concatenated directly into the DOM as raw HTML. Any markup embedded in a notebook name, including <script> tags or event handlers on injected elements, is parsed and executed by the renderer.
SiYuan ships as an Electron application in which the renderer process is granted Node.js integration. This means the JavaScript execution context has access to modules such as child_process, allowing an attacker to spawn arbitrary operating system processes. What would ordinarily be a client-side scripting issue in a browser context becomes a full command execution primitive in this Electron configuration.
User interaction is required: a victim must open the Daily Note picker for the malicious notebook name to render and trigger the payload. Once triggered, code runs with the privileges of the SiYuan process.
Root Cause
The root cause is missing output encoding of notebook name strings in the mount and picker rendering paths. Relevant source locations include app/src/util/mount.ts line 72 and kernel/model/file.go lines 2446-2454. The application treats notebook names as trusted display strings rather than untrusted user input.
Attack Vector
An attacker crafts a notebook whose name contains HTML or JavaScript payloads and delivers it to a victim, for example through a shared workspace, a synced notebook, or a socially engineered import. When the victim opens the Daily Note picker, the payload executes in the Electron renderer, invokes Node.js APIs, and runs commands on the host operating system.
For technical details and proof-of-concept references, see the VulnCheck advisory and the SiYuan project repository.
Stop Remote Code Execution Before It Runs
Singularity™ Endpoint detects and blocks exploit attempts at machine speed, including zero-days and novel attack techniques.
Stop Exploit AttemptsDetection Methods for CVE-2026-93922
Indicators of Compromise
- Notebook directories or metadata whose display names contain HTML tags, angle brackets, on*= event handlers, or javascript: schemes.
- Unexpected child processes spawned by the SiYuan Electron process, particularly shells (cmd.exe, powershell.exe, /bin/sh, bash).
- Outbound network connections from the SiYuan process to unknown hosts following the opening of a Daily Note picker.
- Newly written files or scheduled tasks created by the SiYuan process shortly after user interaction with notebooks.
Detection Strategies
- Inspect notebook metadata files on disk for name fields containing markup characters and script constructs.
- Alert on process-creation events where the parent image is the SiYuan Electron binary and the child is an interpreter or shell.
- Monitor Electron applications with Node.js integration for anomalous use of child_process, fs, or network modules.
Monitoring Recommendations
- Log endpoint process trees involving SiYuan and forward them to a central analytics pipeline for behavioral review.
- Track file integrity of notebook synchronization directories to detect notebooks introduced from external sources.
- Correlate user-driven UI events with subsequent process and network activity to identify XSS-triggered command execution.
How to Mitigate CVE-2026-93922
Immediate Actions Required
- Upgrade SiYuan to a release later than 3.8.4 that addresses GHSA-8c2m-33v9-vvqm as soon as it is available.
- Audit existing notebooks and rename or remove any whose names contain HTML markup, angle brackets, or scripting constructs.
- Restrict notebook imports and synchronization to trusted sources until the patched version is deployed.
- Instruct users to avoid opening the Daily Note picker on workspaces containing notebooks from untrusted origins.
Patch Information
Refer to the upstream SiYuan GitHub Security Advisory GHSA-8c2m-33v9-vvqm for the fixed version and commit references. The advisory tracks the remediation for the missing output encoding in the notebook name rendering path.
Workarounds
- Manually sanitize notebook names by renaming any containing <, >, ", ', or & characters through the file system before launching SiYuan.
- Isolate SiYuan on hosts without sensitive credentials or administrative privileges until patched.
- Where feasible, run SiYuan under a low-privilege operating system account to limit the impact of arbitrary command execution.
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

