CVE-2026-68584
Executive Summary
CVE-2026-68584 is an unpatched authentication bypass vulnerability in SiYuan, a popular open-source personal knowledge management and note-taking application. The flaw exists in versions prior to v3.7.3 and specifically impacts SiYuan's publish mode, where multiple content-returning endpoints (getHeadingChildrenDOM, getHeading*Transaction, getBacklinkDoc) fail to enforce the same password checks that protect the primary getDoc endpoint. An anonymous, unauthenticated attacker can exploit this logic gap to retrieve the full content of password-protected documents by first obtaining internal block IDs from reader-accessible endpoints, then invoking the unprotected content endpoints. With a CVSS base score of 8.6 (High) and a confirmed public PoC, this vulnerability poses a significant confidentiality risk to any SiYuan instance deployed in publish mode. The vendor has not yet released a patch, and no version information has been officially confirmed as fixed, leaving affected deployments exposed until mitigations are applied.
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
CVE-2026-68584 is rooted in inconsistent access-control enforcement across API endpoints within SiYuan's publish mode. In normal operation, SiYuan's publish mode allows read-only access to selected notebooks or documents via HTTP, with optional password protection per document or notebook. The primary endpoint getDoc performs a password check: if the requested document is password-protected, the endpoint validates the provided credential before returning content. This is the intended gatekeeper.
The vulnerability arises because several secondary content-returning endpoints were added or modified without inheriting this same password validation logic. Specifically:
getHeadingChildrenDOM— returns the DOM structure of heading children for a given block ID.getHeading*Transaction— a family of transaction-based endpoints that return heading content and associated metadata.getBacklinkDoc— returns backlink documents referencing a given block ID.
All three endpoint groups accept a block ID as input and return document content (or a DOM representation thereof). They are routed through the same HTTP handler that serves getDoc, but the authorization wrapper that applies the password gate to getDoc was not applied to these newer endpoints. The attack surface is therefore identical: any SiYuan instance with publish mode enabled and at least one password-protected document is vulnerable.
The attack mechanism requires no authentication and no special privileges. The attacker must first obtain internal block IDs, which are 22-character base62-encoded strings (e.g., 20210808180117-czj9dhb). These IDs are exposed through several reader-accessible endpoints that do not require authentication, such as getBlock or the document outline endpoint, which return structural information including block IDs even for password-protected documents. Once the attacker holds a valid block ID, they simply call getHeadingChildrenDOM or getBacklinkDoc with that ID; the server returns the full heading hierarchy and content without ever checking the document's password.
The root cause is a classic broken access control issue (CWE-288: Authentication Bypass Using an Alternate Path). The codebase implements a centralized authorization layer for getDoc but fails to apply it uniformly to sibling endpoints that operate on the same underlying document model. This is amplified by the fact that the block-ID namespace is enumerable/predictable in practice, eliminating the need for blind guessing. A successful request yields a 200 OK response with the document content serialized as JSON or HTML, typically containing the full text of headings, paragraphs, and embedded media references.
From a code perspective, the fix would involve routing all content-returning endpoint handlers through a common authorization middleware that consults the document's password policy before any data is serialized. The absence of a patch (patch confidence 0/4) indicates that this middleware was either never implemented or is misconfigured in the affected versions.
Exploitation Scenarios
Prerequisites: SiYuan instance with publish mode enabled, at least one password-protected document, and network exposure of the publish port (default is TCP 6806, configurable).
Step 1 — Discover the target. An attacker scans the internet for exposed SiYuan publish instances. SiYuan's publish mode responds with distinctive API endpoints and a JSON-based health check. Shodan queries such as "SiYuan" or "title:SiYuan" or "publish/*.json" can locate candidates.
Step 2 — Obtain block IDs. The attacker calls a reader-accessible endpoint to enumerate block IDs. For example:
GET /api/block/getBlock?id=<known-block>
Alternatively, the outline or document tree endpoint returns a list of block IDs even for password-protected documents. If the attacker knows the document's path or has a valid session cookie to access the notebook list (which publish mode exposes without password for the list itself), they can extract IDs directly.
Step 3 — Bypass the password gate. With a valid block ID in hand, the attacker calls an unprotected endpoint:
GET /api/attr/getHeadingChildrenDOM?id=<compromised-block-id>
or
GET /api/attr/getBacklinkDoc?id=<compromised-block-id>&markdown=1
The server responds with full content — heading text, paragraph text, and structured data — without requiring the document password. The response is typically JSON with a data field containing the serialized DOM.
Step 4 — Scale to all protected documents. The attacker repeats steps 2–3 for all block IDs discovered, thereby leaking the entire contents of all password-protected documents in the publish space.
Additional scenario — Transaction-based extraction. The getHeading*Transaction family endpoints accept a transaction payload specifying block IDs and return the corresponding heading transactions (edits, inserts, deletes) which reconstruct full document history, including prior revisions. This amplifies impact to include version history leak.
A public PoC exists (PoC status: Public), though no Nuclei template or exploit code has been published. The PoC demonstrates the full chain: ID enumeration + unprotected endpoint call yielding the protected document content.
Impact Assessment
The Core CVSS v3.1 vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N, yielding a base score of 8.6 (High). The key indicators:
- Attack Vector: Network (AV:N) — remotely exploitable over HTTP.
- Attack Complexity: Low (AC:L) — no special conditions; the ID-gathering step is trivial.
- Privileges Required: None (PR:N) — fully unauthenticated.
- User Interaction: None (UI:N) — no victim action needed.
- Scope: Changed (S:C) — the vulnerable component (API layer) impacts an adjacent security domain (document confidentiality).
- Confidentiality Impact: High (C:H) — full disclosure of password-protected data.
- Integrity Impact: None (I:N) — no data modification.
- Availability Impact: None (A:N) — no service disruption.
Business impact: For enterprises using SiYuan for internal knowledge bases, meeting minutes, or design documents, this vulnerability leaks sensitive content to any anonymous internet user who can find the publish instance. The blast radius includes:
- Complete loss of confidentiality for all password-protected documents.
- Compliance implications if the leaked data includes PII, PHI, or internal financial data.
- Reputational damage for vendors/operators deploying SiYuan in production.
- Intelligence gathering advantage for threat actors who can harvest technical docs, architecture diagrams, or credentials embedded in notes.
Affected systems: All SiYuan versions before v3.7.3 with publish mode enabled. The vulnerability is independent of the client OS (Windows, macOS, Linux, Docker) since it lives in the HTTP API layer.
Detection Guidance
Sigma Rule
title: SiYuan Authentication Bypass - Unprotected Endpoint Access
id: 2f4a5c2e-9c1d-4b4e-8f7a-1d9e0f3a6b2c
status: experimental
description: >
Detects attempts to access SiYuan content-returning endpoints
(getHeadingChildrenDOM, getBacklinkDoc, getHeading*Transaction)
without prior authentication, indicating CVE-2026-68584 exploitation.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-68584
author: Valters IT Threat Intel Team
date: 2026/05/15
logsource:
category: webserver
product: siyuan
definition: 'Requires web server or application logs from the SiYuan publish HTTP listener.'
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- 'getHeadingChildrenDOM'
- 'getBacklinkDoc'
- 'getHeadingTransaction'
filter_known_good:
sc-status: 401
condition: selection and not filter_known_good
falsepositives:
- Legitimate API calls by the SiYuan web frontend when a user with an active session accesses a document.
level: high
YARA Rule
rule SiYuan_CVE_2026_68584_Endpoint_Enumeration
{
meta:
author = "Valters IT Threat Intel Team"
description = "Detects requests to SiYuan unprotected content endpoints indicative of CVE-2026-68584"
reference = "CVE-2026-68584"
date = "2026-05-15"
score = 80
strings:
$e1 = "getHeadingChildrenDOM"
$e2 = "getBacklinkDoc"
$e3 = "getHeadingTransaction"
$e4 = "getHeadingChildrenTransaction"
$id = /[0-9]{14}-[a-z0-9]{8}/ // SiYuan block ID pattern
condition:
(uint16(0) == 0x4d5a or $e1 at 0 or $e2 at 0 or $e3 at 0)
and any of ($e1, $e2, $e3, $e4)
and any of ($id)
}
Suricata IDS Rule
alert http any any -> any any (msg:"ET EXPLOIT SiYuan CVE-2026-68584 Authentication Bypass - Unprotected Endpoint"; flow:established,to_server; http.method; content:"GET"; http.uri; content:"getHeadingChildrenDOM"; nocase; http.uri; content:"getBacklinkDoc"; nocase; http.uri; content:"getHeadingTransaction"; nocase; http.uri; content:"id="; http.uri; content:".json"; endswith; classtype:attempted-admin; sid:202668584; rev:1; metadata:created_at 2026_05_15, updated_at 2026_05_15, cve CVE-2026-68584;)
Elastic Detection
sequence by source.ip with maxspan=5m
[network where destination.port == 6806 and http.request.method == "GET" and http.request.uri.text like "*getHeadingChildrenDOM*"]
[network where destination.port == 6806 and http.request.method == "GET" and http.request.uri.text like "*getBacklinkDoc*" or http.request.uri.text like "*getHeadingTransaction*"]
Splunk SPL Query
index=web sourcetype=access_combined uri_path="*"
| where match(uri_path, "(?i)(getHeadingChildrenDOM|getBacklinkDoc|getHeadingTransaction|getHeadingChildrenTransaction)")
| where status != "401"
| where NOT (user="*" AND session="*") // filter out authenticated sessions if session cookie is logged
| stats count min(_time) as first_seen max(_time) as last_seen by clientip, uri_path, status
| search count >= 2
| eval threat="CVE-2026-68584 Exploitation Attempt"
| table _time, clientip, uri_path, status, count, first_seen, last_seen, threat
Wazuh OSSEC Rule
<group name="siyuan,">
<rule id="892729" level="12">
<decoded_as>json</decoded_as>
<field name="url">\.getHeadingChildrenDOM|getBacklinkDoc|getHeadingTransaction</field>
<description>SiYuan CVE-2026-68584: Unprotected endpoint accessed - potential authentication bypass</description>
<group>authentication_failures,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 — UNPATCHED. No patch has been released by the SiYuan vendor as of the publication of this report. There is no confirmed fixed version. The following actions are ordered by urgency:
1. Immediate Mitigations (apply now)
- Disable publish mode on any SiYuan instance exposed to untrusted networks. If publish mode is not actively required for business operations, shut it down immediately. This eliminates the entire attack surface.
- Restrict network access — place the SiYuan publish port (default TCP 6806) behind a VPN, firewall rule, or reverse proxy with mandatory authentication. Only allow connections from trusted IP ranges.
- Deploy a WAF or reverse proxy that blocks requests containing the vulnerable endpoint names (
getHeadingChildrenDOM,getBacklinkDoc,getHeadingTransaction) either globally or to users without a valid session token. - If publish mode is unavoidable, set the document-level password and also enable the "unable to access via link without password" option if present in the version in use. Confirm that all documents are password-protected; unprotecting a single notebook exposes it.
2. Patch/Upgrade Steps
- Monitor the SiYuan GitHub repository and official announcements for a patched release (expected version ≥ v3.7.3 or a dedicated security patch). Once available, upgrade immediately to the patched build.
- Check the affected version range — if your exact version is unknown, assume all versions before v3.7.3 (per NVD) are vulnerable.
- After upgrading, re-verify that password-protected documents are no longer accessible via the unprotected endpoints using the public PoC.
3. Long-Term Hardening
- Adopt the principle of least privilege for network exposure — never publish note-taking tools directly to the internet. Use a reverse proxy with integrated SSO/OIDC authentication.
- Implement a security regression test in your CI/CD pipeline for SiYuan deployments that checks for password enforcement across all content-returning endpoints.
- Enable detailed audit logging on the SiYuan HTTP layer to capture endpoint access, and forward these logs to a SIEM for anomaly detection.
- Classify documents stored in SiYuan — do not store sensitive or regulated data in any tool that exposes a publish mode without robust, tested access controls.
References
CISA KEV status: No, CVE-2026-68584 is not listed on CISA's Known Exploited Vulnerabilities catalog at the time of writing.
Exploit availability: A public PoC exists (PoC status: Public). The PoC is a standalone script demonstrating the ID-enumeration + endpoint-call chain. No Nuclei template and no weaponized exploit code have been publicly released. This PoC status elevates the risk of opportunistic exploitation by low-skilled actors who can copy the demonstrated technique.
Active exploitation evidence: No confirmed in-the-wild exploitation has been reported by any major threat intel vendor at the time of writing. However, given the ease of exploitation (no authentication, low complexity, trivial ID discovery), exploitation is expected to emerge rapidly once the PoC circulates in criminal forums.
Associated threat actors/campaigns: No known APT group has been attributed to this vulnerability. The likely threat actors are:
- Opportunistic scanners — mass-scanning bots that detect exposed SiYuan publish portals and automate ID harvesting.
- Data exfiltration groups — actors targeting knowledge-management platforms for proprietary or personally identifiable data.
- Insider threat — employees or contractors who discover the flaw and use it to read documents they lack authorization to access.
Related vulnerability context: CVE-2026-68584 belongs to the class of broken access control (CWE-288) flaws increasingly found in self-hosted note-taking and collaboration tools. Similar issues have affected other FOSS systems (e.g., historical issues in Outline, DokuWiki, and XWiki). The trend suggests that operators of self-hosted knowledge tools are often unaware of the publish-mode exposure, making them a soft target for data theft.
Recommendation for enterprise SOCs: Query your network logs for connections to port 6806 and filter for the vulnerable endpoint strings in URI paths. Treat any successful response (HTTP 200) to getHeadingChildrenDOM or getBacklinkDoc from an internal or external source without a preceding successful authentication event as a high-confidence indicator of compromise.
References
- NVD — CVE-2026-68584 Detail: https://nvd.nist.gov/vuln/detail/CVE-2026-68584
- CWE-288: Authentication Bypass Using an Alternate Path: https://cwe.mitre.org/data/definitions/288.html
- SiYuan Official GitHub Repository (watch for advisory/patches): https://github.com/siyuan-note/siyuan
- SiYuan Official Website & Release Notes: https://b3log.org/siyuan/en/
- FIRST.org EPSS (for future EPSS score tracking): https://www.first.org/epss/
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.