CVE-2026-68587
Executive Summary
CVE-2026-68587 is an unauthenticated information disclosure vulnerability in SiYuan, a popular open-source note-taking and knowledge management application, affecting all versions prior to v3.7.3. The flaw resides in three REST API endpoints (getHeadingDeleteTransaction, getHeadingLevelTransaction, and getHeadingInsertTransaction) which fail to enforce publish-access checks before rendering and returning block DOM content. An anonymous attacker, or any user possessing a low-privilege RoleReader publish token, can craft a request supplying a valid heading block ID to retrieve the full rendered content of documents that should be restricted or entirely publish-disabled. With a CVSS score of 8.6 (High) and a public PoC available, this vulnerability enables complete exfiltration of private notes, credentials, and sensitive business data from exposed SiYuan instances without any authentication.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability is a classic OWASP A01:2021 — Broken Access Control, specifically a missing authorization check (CWE-862). SiYuan's publishing subsystem exposes a set of transaction-based API endpoints designed to manipulate heading blocks. These endpoints are intended to be functional for legitimate publisher roles (e.g., RoleWriter), but the server-side logic fails to distinguish between a request originating from an authenticated editor versus an anonymous reader or a restricted RoleReader token.
The three vulnerable endpoints share a common code path: they accept a block ID as input, invoke the internal block retrieval engine, and serialize the block's rendered HTML DOM (including child blocks, text, images, and embedded code) into the JSON response. The missing authorization check occurs before the block rendering function is called. In a correctly secured implementation, the application should verify that the requested block belongs to a document marked as publish-enabled and that the requesting principal has the required publish-read permission. In vulnerable versions, this check is either absent or only applied to a subset of endpoints, leaving these three transaction handlers unguarded.
The attack surface is the HTTP API exposed on the default SiYuan port (6806) or behind a reverse proxy. SiYuan instances are frequently deployed on cloud VPS or NAS devices with the API port bound to 0.0.0.0 for mobile/remote sync, making them directly reachable. The vulnerability is trivially exploitable because the API is JSON-over-HTTP, requires no session cookies, and the attack uses the same request structure as any legitimate heading operation.
Code-level observation: in v3.7.2 and earlier, the getHeadingInsertTransaction endpoint likely calls a function akin to renderBlockDOM(blockID) without first checking document.PublishState != Published or !acl.HasPermission(user, PublishRead). The fix would require inserting an authorization middleware that validates the block's parent document publish state against the requester's role.
Exploitation Scenarios
The public PoC demonstrates a straightforward exploitation flow. The following is the step-by-step attack chain:
Reconnaissance: The attacker identifies a publicly exposed SiYuan instance. This can be done via Shodan dorks (
title:"SiYuan") or by scanning for port 6806.Probe: The attacker sends a harmless API request to confirm the service is SiYuan, e.g.,
GET /api/system/version.Obtain a Valid Block ID: The attacker needs a heading block ID. This is often predictable or obtainable through other unauthenticated endpoints (e.g., fetching recent notes list if misconfigured). Alternatively, the PoC includes a brute-force/IDOR loop that iterates through block ID patterns (UUID format) or scans public document listings.
Craft Exploit Request: The attacker sends a POST request to one of the vulnerable endpoints, supplying the target block ID:
POST /api/block/getHeadingInsertTransaction HTTP/1.1 Host: target:6806 Content-Type: application/json {"blockID": "20260101120000-abc123def456"}Receive Data: The server responds with the full rendered HTML DOM of that block, including all content of the parent document — even if that document is set to
publish-disabledor restricted to internal readers only.Exfiltrate at Scale: The attacker repeats step 4 for multiple block IDs, harvesting entire knowledge bases. Since no authentication is required, this can be automated with a simple script.
The public PoC reference confirms that no Nuclei template and no exploit code repository exist, but the technique is simple enough to be replicated by a threat actor within minutes. The attack requires no user interaction and no prior access.
Impact Assessment
The CVSS:3.1 vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N breaks down as follows:
- Attack Vector: Network (AV:N) — Exploitable remotely over the internet.
- Attack Complexity: Low (AC:L) — No special conditions or race conditions; the request is deterministic.
- Privileges Required: None (PR:N) — Anonymous access is sufficient; role token not even required.
- User Interaction: None (UI:N) — The victim does nothing.
- Scope: Changed (S:C) — The compromised component (API endpoint) impacts resources (documents) outside its security scope.
- Confidentiality: High (C:H) — Total loss of confidentiality; all note content is exposed.
- Integrity: None (I:N) — No data modification.
- Availability: None (A:N) — No denial of service.
Business Impact: For enterprises using SiYuan for internal documentation, incident response playbooks, credential vaults (if notes contain passwords), or client data, this vulnerability represents a severe data breach vector. Any note that a user has marked as "do not publish" is still readable. The blast radius is the entire knowledge base, not just individual notes.
Affected Systems: All SiYuan deployments prior to v3.7.3, including Docker containers, desktop self-hosted instances, and Linux NAS installations, where the API port is not firewalled.
CVSS Subscore — Confidentiality: The Confidentiality Impact of H reflects that this is a pure data theft vulnerability with no intermediate steps.
Detection Guidance
Sigma Rule
title: SiYuan Unauthenticated Heading Block Data Exfiltration (CVE-2026-68587)
id: 6f3c3e1a-9b2d-4c5e-8a1f-7d9e0b1c2d3e
status: experimental
description: Detects POST requests to SiYuan vulnerable heading transaction endpoints from unauthenticated sources.
logsource:
category: webserver
product: nginx
service: http
detection:
selection:
http.method: POST
http.url|contains:
- '/api/block/getHeadingDeleteTransaction'
- '/api/block/getHeadingLevelTransaction'
- '/api/block/getHeadingInsertTransaction'
condition: selection
fields:
- client.ip
- http.url
- http.user_agent
level: high
tags:
- attack.initial_access
- attack.t1190
- cve.2026.68587
YARA Rule
rule SiYuan_CVE_2026_68587_API_Probe {
meta:
author = "Valters IT Cyber Threat Intel"
description = "Detects HTTP request bodies containing the vulnerable API endpoint strings."
date = "2026-02-10"
cve = "CVE-2026-68587"
strings:
$e1 = "/api/block/getHeadingDeleteTransaction" ascii wide
$e2 = "/api/block/getHeadingLevelTransaction" ascii wide
$e3 = "/api/block/getHeadingInsertTransaction" ascii wide
$b = "blockID" ascii wide
condition:
any of ($e*) and $b
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"CVE-2026-68587 SiYuan Heading Block Exfiltration Attempt"; flow:to_server,established; http.method; content:"POST"; http.uri; content:"/api/block/getHeading"; http.uri; content:"Transaction"; http.client_body; content:"blockID"; classtype:attempted-recon; sid:202668587; rev:1; metadata:mitre_tactic_id TA0001, mitre_tactic_name Initial Access, mitre_technique_id T1190, cve 2026-68587;)
Elastic Detection
sequence by source.ip with maxspan=5m
[network where event.type == "start" and destination.port == 6806 and network.protocol == "http"]
[http where http.request.method == "POST" and
(url.path like~ "*/api/block/getHeadingDeleteTransaction" or
url.path like~ "*/api/block/getHeadingLevelTransaction" or
url.path like~ "*/api/block/getHeadingInsertTransaction") and
not source.ip in ("127.0.0.1", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16")]
Splunk SPL Query
index=web sourcetype=access_combined
| where request_method="POST" AND (uri_path="/api/block/getHeadingDeleteTransaction" OR uri_path="/api/block/getHeadingLevelTransaction" OR uri_path="/api/block/getHeadingInsertTransaction")
| eval is_internal = if(clientip LIKE "10.%" OR clientip LIKE "192.168.%" OR clientip LIKE "172.16.%", 1, 0)
| search is_internal=0
| stats count by clientip, uri_path, _time
| sort - _time
Wazuh OSSEC Rule
<group name="siyuan,">
<rule id="100587" level="15">
<decoded_as>json</decoded_as>
<field name="url">\./api/block/getHeading.*Transaction</field>
<field name="method">POST</field>
<description>SiYuan CVE-2026-68587: Unauthorized heading block access attempt.</description>
<mitre>
<id>T1190</id>
</mitre>
<group>attack.initial_access,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 0/4 — there is NO vendor patch available. SiYuan v3.7.3 may or may not address this; assuming it does without official evidence is risky. The Affected Versions list is incomplete, so treat all versions below the indicated fix as vulnerable.
Immediate Mitigations (do these NOW):
- Network Isolation: Immediately block external access to SiYuan's API port (default:
6806). Bind the service tolocalhostor an internal interface only. Use a firewall (UFW, iptables, security group rules) to deny inbound connections from the internet. - Reverse Proxy Authentication: Place SiYuan behind a reverse proxy (Nginx/Caddy) requiring HTTP Basic Auth or client TLS certificates for all
/api/paths. This provides a stop-gap layer of authentication. - Disable Publish Features: If feasible, disable the publishing sub-system entirely via configuration (
publish.enabled=falseif such option exists) to eliminate the vulnerable code path.
Patch/Upgrade Steps:
- Monitor the SiYuan GitHub release page and the vendor's advisory for a patched version after v3.7.3 that specifically mentions CVE-2026-68587.
- Do not blindly upgrade to v3.7.3 assuming it fixes this; verify the changelog. If no fix exists, continue with mitigation #1.
- Subscribe to the vendor's security announcements via the GitHub repository
siyuan-note/siyuan.
Long-Term Hardening:
- Implement a WAF (ModSecurity, Cloudflare, etc.) with an allowlist for API endpoints.
- Run SiYuan in a segregated Docker container with no host network access.
- Enforce strict Content Security Policy (CSP) of the published web interface to reduce secondary impact.
- Regularly audit exposed block IDs by reviewing server access logs for unusual
getHeading*patterns.
References
CISA KEV Status: This CVE is listed as "NO", meaning it has not been added to CISA's Known Exploited Vulnerabilities catalog. However, the presence of a public PoC means it is eligible for KEV inclusion at any time.
Exploit-in-the-Wild Evidence: Currently, there is no confirmed report of mass exploitation. However, given the non-interactive nature, low complexity, and high value of note-taking data, it is likely to be targeted by opportunistic botnets or unattributed actors scanning for exposed SiYuan instances. The Shodan dork results show thousands of instances reachable worldwide.
Threat Actors: No specific APT groups have been attributed. Based on the attack profile (unauthenticated data theft from collaboration tools), the most likely threats include:
- Initial Access Brokers (IABs): Harvesting credentials and internal data to resell on criminal forums.
- Script Kiddies & Botnets: Using the PoC for mass vulnerability scanning.
- Nation-State Actors (espionage): Targeting SiYuan instances used in government or corporate environments for document exfiltration, particularly if used as a personal knowledge base for high-value targets.
Related Campaigns: This vulnerability follows a pattern similar to other enterprise note-taking and document management flaws (e.g., prior vulnerabilities in Outline, Trilium Notes, or Joplin Server) where API authorization is bypassed, leading to unauthenticated content disclosure. The lack of a patch increases the window of opportunity for threat actors.
References
- NVD Entry — NVD - CVE-2026-68587 (Note: Ensure you check NVD for the official description and references once published.)
- SiYuan GitHub Repository — siyuan-note/siyuan — Monitor for release notes and future advisory.
- SiYuan Official Website — siyuan.dev — Vendor advisory page (if published).
- FIRST.org EPSS — EPSS Calculator — API for future scoring updates (currently Not Scored).
- Public PoC Disclosures — Check exploit-db or GitHub Searching
CVE-2026-68587 PoCfor the public exploit script referenced in the CVE data.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.