CVE-2026-93922: SiYuan: stored XSS in notebook names enables RCE
HIGHPoC AVAILABLECISA: ATTENDSiYuan through 3.8.4 renders notebook names as raw HTML in the Daily Note picker, so an attacker-supplied notebook name becomes stored cross-site scripting in an Electron renderer that has Node.js access, which turns it directly into operating system command execution. The CVSS is 8.8 (network, low complexity, no privileges, user interaction required). Public PoC code exists and CISA SSVC rates it ATTEND, but EPSS is low at 0.008 (top 44%) and it is not in CISA KEV, so there is no evidence of active exploitation yet. Downstream dependents and a patched version are not listed in the data we hold. Treat it as a high-priority fix for any team using SiYuan as a personal knowledge base or AI-assisted note tool, especially with shared or synced workspaces. Upgrade to a release later than 3.8.4 once the vendor advisory confirms the fixed version (GHSA-8c2m-33v9-vvqm). Until then, do not open the Daily Note picker on workspaces from untrusted sources.
What is the risk?
High. Exploitation is low complexity with no privileges, and a public PoC exists. The user interaction needed is only opening the Daily Note picker. Because the Electron renderer exposes Node.js, a successful XSS gives full code execution with the user's privileges and a scope of confidentiality, integrity and availability all rated high. Likelihood is moderate: EPSS is 0.00816 (top 44%), there is no KEV listing and no Nuclei template. Exposure depends on how attacker-controlled notebook names reach a victim (shared workspaces, imported or synced data, or a malicious notebook). Risk is higher on developer and analyst workstations holding API keys, tokens and proprietary notes. The practical population is limited to SiYuan desktop users.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| github.com/siyuan-note/siyuan/kernel | — | — | No patch |
Do you use github.com/siyuan-note/siyuan/kernel? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade SiYuan to a version later than 3.8.4 that fixes the escaping in the Daily Note picker, and confirm the exact fixed release in the vendor advisory GHSA-8c2m-33v9-vvqm. 2) Until patched, avoid opening the Daily Note picker, and do not import, sync or open notebooks from untrusted sources. 3) Audit existing notebook names for HTML or script content such as <img onerror>, <script> or <svg onload>. 4) Rotate API keys and tokens stored on workstations where a suspicious notebook was opened. 5) Detect by hunting for child processes spawned by the SiYuan Electron process (shells, curl, powershell) and unexpected outbound connections. 6) Where possible, restrict desktop app execution with EDR and application control policies.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-93922?
SiYuan through 3.8.4 renders notebook names as raw HTML in the Daily Note picker, so an attacker-supplied notebook name becomes stored cross-site scripting in an Electron renderer that has Node.js access, which turns it directly into operating system command execution. The CVSS is 8.8 (network, low complexity, no privileges, user interaction required). Public PoC code exists and CISA SSVC rates it ATTEND, but EPSS is low at 0.008 (top 44%) and it is not in CISA KEV, so there is no evidence of active exploitation yet. Downstream dependents and a patched version are not listed in the data we hold. Treat it as a high-priority fix for any team using SiYuan as a personal knowledge base or AI-assisted note tool, especially with shared or synced workspaces. Upgrade to a release later than 3.8.4 once the vendor advisory confirms the fixed version (GHSA-8c2m-33v9-vvqm). Until then, do not open the Daily Note picker on workspaces from untrusted sources.
Is CVE-2026-93922 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2026-93922, increasing the risk of exploitation.
How to fix CVE-2026-93922?
1) Upgrade SiYuan to a version later than 3.8.4 that fixes the escaping in the Daily Note picker, and confirm the exact fixed release in the vendor advisory GHSA-8c2m-33v9-vvqm. 2) Until patched, avoid opening the Daily Note picker, and do not import, sync or open notebooks from untrusted sources. 3) Audit existing notebook names for HTML or script content such as <img onerror>, <script> or <svg onload>. 4) Rotate API keys and tokens stored on workstations where a suspicious notebook was opened. 5) Detect by hunting for child processes spawned by the SiYuan Electron process (shells, curl, powershell) and unexpected outbound connections. 6) Where possible, restrict desktop app execution with EDR and application control policies.
What systems are affected by CVE-2026-93922?
This vulnerability affects the following AI/ML architecture patterns: AI-assisted knowledge management desktop apps, Electron-based AI tools, Developer and analyst workstations.
What is the CVSS score for CVE-2026-93922?
CVE-2026-93922 has a CVSS v3.1 base score of 8.8 (HIGH). The EPSS exploitation probability is 0.82%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011User ExecutionAML.T0050Command and Scripting InterpreterAML.T0112Machine CompromiseCompliance Controls Affected
What are the technical details?
Original Advisory
SiYuan through 3.8.4 renders notebook names as raw HTML in the Daily Note picker dialog without escaping, allowing stored cross-site scripting in the Electron renderer. Attackers can create notebooks with HTML payloads in names that execute JavaScript with Node.js access when the picker opens, enabling operating system command execution.
Exploitation Scenario
An attacker creates or shares a notebook whose name contains an HTML payload, for example an element with an onerror handler that calls Node.js child_process. The victim receives it through a shared workspace, a synced or imported data folder, or a social-engineering lure. When the victim opens the Daily Note picker, the notebook name is rendered unescaped and the script runs in the Electron renderer with Node.js access. The payload launches a shell, downloads a second stage, and steals local notes, SSH keys and LLM API tokens.
Weaknesses (CWE)
CWE-79Improper Neutralization of Input During Web Page GenerationPrimaryCWE-79Improper Neutralization of Input During Web Page GenerationCWE-79 — Improper Neutralization of Input During Web Page Generation: The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
- [Architecture and Design] Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid [REF-1482]. Examples of libraries and frameworks that make it easier to generate properly encoded output include Microsoft's Anti-XSS library, the OWASP ESAPI Encoding module, and Apache Wicket.
- [Implementation, Architecture and Design] Understand the context in which your data will be used and the encoding that will be expected. This is especially important when transmitting data between different components, or when generating outputs that can contain multiple encodings at the same time, such as web pages or multi-part mail messages. Study all expected communication protocols and data representations to determine the required encoding strategies. For any data that will be output to another web page, especially any data that was received from external inputs, use the appropriate encoding on all non-alphanumeric characters. Parts of the same output document may require different encodings, which will vary depending on whether the output is in the: etc. Note that HTML Entity Encoding is only appropriate for the HTML body. Consult the XSS Prevention Cheat Sheet [REF-724] for more details on the types of encoding and escaping that are needed. HTML body Element attributes (such as src="XYZ") URIs JavaScript sections Casca
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:HReferences
- github.com/siyuan-note/siyuanproduct
- github.com/siyuan-note/siyuan/blob/v3.8.4/app/src/util/mount.tstechnical-description
- github.com/siyuan-note/siyuan/blob/v3.8.4/kernel/model/file.gotechnical-description
- github.com/siyuan-note/siyuan/security/advisories/GHSA-8c2m-33v9-vvqmvendor-advisory
- vulncheck.com/advisories/siyuan-through-3.8.4-stored-xss-via-notebook-namesthird-party-advisory
Timeline
Related Vulnerabilities
CVE-2024-291210.0BentoML: RCE via insecure deserialization (CVSS 10)
Same attack type: Code ExecutionCVE-2026-2185810.0n8n: Input Validation flaw enables exploitation
Same attack type: Code ExecutionCVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Code ExecutionCVE-2025-5952810.0Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Code ExecutionGHSA-vvpj-8cmc-gx3910.0picklescan: security flaw enables exploitation
Same attack type: Code Execution