CVE-2026-75916 Overview
CVE-2026-75916 is a cross-site scripting (XSS) vulnerability in SiYuan, a personal knowledge management application, affecting versions through 3.7.3. The flaw resides in the (( block-reference autocomplete hint popup. The genHintItemHTML() function in app/src/protyle/hint/extend.ts concatenates a block's name, alias, and memo metadata fields into the popup HTML without escaping. An attacker who controls these fields can inject a self-firing payload that executes when a victim triggers the autocomplete. Because SiYuan's Electron windows run with nodeIntegration enabled, contextIsolation disabled, and no Content Security Policy, the XSS escalates to arbitrary operating system command execution through require('child_process').
Critical Impact
A stored XSS in block metadata escalates to full remote code execution on any workspace user who triggers the reference hint popup.
Affected Products
- SiYuan through version 3.7.3
- SiYuan Electron desktop application (Windows, macOS, Linux builds)
- Shared or synchronized SiYuan workspaces where block metadata originates from another user
Discovery Timeline
- 2026-08-19 - CVE-2026-75916 published to NVD
- 2026-08-19 - Last updated in NVD database
Technical Details for CVE-2026-75916
Vulnerability Analysis
SiYuan is an Electron-based note-taking application that supports block-level references. Typing (( invokes an autocomplete popup listing candidate blocks. The renderer builds each hint entry through genHintItemHTML(), which concatenates block metadata into an HTML string. The name, alias, and memo fields are inserted verbatim, without HTML entity encoding or sanitization. Any attacker who can set these fields on a block places arbitrary markup into the popup DOM. When a victim types (( followed by a search term surfacing the crafted block, the payload renders and executes automatically. The vulnerability is classified under CWE-79: Improper Neutralization of Input During Web Page Generation.
Root Cause
The root cause is missing output encoding in genHintItemHTML() (app/src/protyle/hint/extend.ts). The function trusts block metadata as safe HTML rather than treating it as untrusted text. Compounding the flaw, the Electron renderer is configured with nodeIntegration: true, contextIsolation: false, and no CSP. These settings expose Node.js primitives — including require('child_process') — to any script running in the renderer context.
Attack Vector
An attacker sets a malicious payload such as <img src=x onerror="require('child_process').exec('...')"> in the name, alias, or memo of a block. Delivery paths include shared notebooks, imported .sy.zip archives, cloud-synchronized workspaces, and collaborative editing scenarios. Execution requires the victim to open the workspace and trigger the (( autocomplete with a search string that surfaces the crafted block. Once fired, the payload runs OS commands under the victim's user account.
No verified proof-of-concept code is published; see the GitHub Security Advisory GHSA-5prr-vgxq-69g9 and the VulnCheck Advisory for full technical details.
Detection Methods for CVE-2026-75916
Indicators of Compromise
- Block metadata (name, alias, memo) containing HTML tags, event handlers such as onerror=, or <script> fragments.
- SiYuan .sy.zip exports or shared notebooks that fail HTML entity checks on metadata fields.
- Unexpected child processes such as cmd.exe, powershell.exe, /bin/sh, or bash spawned by the SiYuan Electron process.
- Outbound network connections from the SiYuan process to attacker-controlled hosts shortly after opening a shared workspace.
Detection Strategies
- Scan SiYuan workspace JSON files for HTML metacharacters (<, >, ", on\w+=) inside block metadata fields.
- Alert on process-lineage relationships where SiYuan.exe or the Electron helper spawns shell interpreters or scripting hosts.
- Monitor Electron renderer telemetry for anomalous use of Node.js APIs, particularly child_process, fs, and net.
Monitoring Recommendations
- Ingest endpoint process-creation logs into your SIEM and correlate SiYuan parent processes with shell spawns.
- Track file writes to SiYuan workspace directories originating from untrusted sync sources or shared archives.
- Baseline outbound network activity from SiYuan and flag deviations following notebook imports.
How to Mitigate CVE-2026-75916
Immediate Actions Required
- Upgrade SiYuan to a fixed release beyond 3.7.3 as published by the maintainers.
- Do not import notebooks, .sy.zip archives, or synchronize workspaces from untrusted sources until patched.
- Audit existing workspaces for block metadata containing HTML markup and remove suspect entries.
Patch Information
Refer to the GitHub Security Advisory GHSA-5prr-vgxq-69g9 for the fixed version and commit references. The remediation escapes block metadata in genHintItemHTML() and should be paired with hardening of Electron settings (enabling contextIsolation, disabling nodeIntegration in the renderer, and adding a Content Security Policy).
Workarounds
- Avoid triggering the (( block-reference autocomplete in workspaces containing content from other users.
- Isolate SiYuan usage to a low-privilege user account or a sandboxed environment such as a container or virtual machine.
- Restrict outbound network access from the SiYuan process using host-based firewall rules until the patch is applied.
# Example: restrict SiYuan outbound traffic on Linux using nftables
sudo nft add rule inet filter output \
meta skuid $(id -u) \
ct state new \
comm "siyuan" \
drop
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

