CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-7J72-F6WG-CXW6

CVE-2026-68584: Authentication Bypass via Auxiliary Content Endpoints in SiYuan

Alon Barad
Alon Barad
Software Engineer

Sep 3, 2026·7 min read·0 visits

Executive Summary (TL;DR)

An unauthenticated remote attacker can bypass password protection on published notes in SiYuan by retrieving block IDs through search metadata leaks and querying auxiliary block endpoints directly.

An authentication bypass vulnerability (classified as CWE-288) exists in the publish-mode component of SiYuan, a Go-based note-taking application. This security flaw allows unauthenticated remote attackers to bypass password-protected note boundaries by leveraging auxiliary block endpoints that fail to enforce document access checks. Attackers can exploit this issue by first harvesting document metadata via a public search endpoint and subsequently fetching full rendered document contents using vulnerable block endpoints. This technical analysis explores the root cause, exploitation methodology, and remediation path.

Vulnerability Overview

SiYuan incorporates a publish-mode component designed to share notebook content over HTTP, typically bound to port 6808. This module supports multiple document access levels, including public, private, hidden, forbidden, and protected. The 'protected' access level allows notes to be listed publicly in the file tree while enforcing a password challenge prior to revealing their structural content.\n\nThe primary path for content retrieval, /api/filetree/getDoc, properly invokes the internal access-validation engine to enforce authentication checks. However, multiple secondary and auxiliary endpoints responsible for block-level data retrieval lack these essential authorization routines. This architectural inconsistency forms the core of the vulnerability, classified under CWE-288: Authentication Bypass Using an Alternate Path or Channel.\n\nBy calling these unauthenticated endpoints directly, any remote attacker can circumvent the primary password check. The only technical prerequisite is discovering the structural identifier of the target block or heading. Once this identifier is obtained, the attacker can retrieve the full rendered Document Object Model (DOM) of the protected resource without authentication.

Root Cause Analysis

The root cause of this vulnerability lies in an inconsistent authorization model across the SiYuan Go-based kernel. In a secure architecture, any endpoint exposing structural children or parent nodes must resolve the master document's permission model. In SiYuan, however, document authorization is split into distinct logical validation paths that are not globally applied.\n\nWhen a user requests a document through the standard UI path, the backend router executes the FilterContentByPublishAccess procedure. This function evaluates the active session state against the password-protection policy of the document. If no valid password-session cookie is transmitted, the server stops execution and returns an empty structural placeholder.\n\nConversely, the auxiliary block and heading endpoints, such as /api/block/getHeadingChildrenDOM and /api/block/getHeadingChildrenIDs, only execute basic role authentication checks. These handlers verify that the system is configured to serve published notes, but they do not trace the requested block ID back to its parent document or evaluate the document's password policy. Consequently, any request containing a valid block identifier is processed, and the system renders and returns the confidential content.\n\nTo compound this authorization flaw, the application's search engine exposes structural identifiers. Although the search endpoint /api/search/searchEmbedBlock implements post-query sanitization, it only redacts the literal text content. The system fails to sanitize the metadata fields, returning the exact block identifiers associated with the matching query results and allowing an attacker to map the target document's layout.

Code-Level Vulnerability & Patch Analysis

The vulnerability is resolved in commit 2d069dce84a25c959ef0093c72c98e05778ef218 by integrating the authorization helper directly into the vulnerable API endpoints. Prior to this patch, handlers in kernel/api/block.go retrieved database blocks without validating parent document metadata.\n\nThe patch introduces a renamed, unified helper function checkBlockPublishAccess that resolves the target block to its root document and evaluates the authorization state. The following code comparison highlights how the vulnerability was addressed in kernel/api/block.go:\n\ndiff\n-func getHeadingChildrenIDs(c *gin.Context) {\n+func getHeadingChildrenIDs(c *gin.Context) {\n \t// ... context bindings\n \tid := arg["id"].(string)\n+\tif !checkBlockPublishAccess(c, id, ret) {\n+\t\treturn\n+\t}\n \tids := model.GetHeadingChildrenIDs(id)\n \tret.Data = ids\n }\n\n-func getHeadingChildrenDOM(c *gin.Context) {\n+func getHeadingChildrenDOM(c *gin.Context) {\n \t// ... context bindings\n \tid := arg["id"].(string)\n+\tif !checkBlockPublishAccess(c, id, ret) {\n+\t\treturn\n+\t}\n \tremoveFoldAttr := true\n \t// ... DOM parsing and retrieval\n }\n\n\nBy adding checkBlockPublishAccess directly into getHeadingChildrenIDs and getHeadingChildrenDOM, the system blocks requests at the routing layer if the requester has not bypassed the primary password gate. The helper function queries the parent document ID associated with the target block, validates the cookie session, and aborts processing if the validation fails.\n\nWhile the patch secures these specific endpoints, it highlights the challenges of implementing a robust, centralized permission model in hierarchical databases. Security teams should ensure that any newly added API endpoints retrieving block metadata or child structures explicitly inherit this security helper to prevent future bypass variants.

Exploitation Methodology

An attack against a vulnerable SiYuan instance follows a multi-stage approach, leveraging the metadata leakage in the search API to populate the parameters for the unauthorized block-retrieval calls. This sequence is illustrated in the architectural diagram below:\n\nmermaid\ngraph LR\n Attacker["Attacker (Unauthenticated)"] -->|Step 1: Discover Doc ID| FileTreeAPI["/api/filetree/listDocsByPath"]\n Attacker -->|Step 2: Query Search| SearchAPI["/api/search/searchEmbedBlock"]\n SearchAPI -->|Step 3: Extract Metadata| Attacker\n Attacker -->|Step 4: Request Content| HeadingAPI["/api/block/getHeadingChildrenDOM"]\n HeadingAPI -->|Step 5: Bypass Gate| Attacker\n\n\nIn the first phase of the attack, the adversary queries the public document listing interface to discover the unique ID of the password-protected note. Although the document's content is blocked, its root identifier remains visible to assist with client-side UI rendering. The attacker then targets the search API to extract internal block IDs by running a query scoped to the discovered document ID:\n\nhttp\nPOST /api/search/searchEmbedBlock HTTP/1.1\nHost: target-siyuan-instance:6808\nContent-Type: application/json\n\n{\n "stmt": "SELECT * FROM blocks WHERE root_id='PROTECTED_DOC_ID' AND type='h'"\n}\n\n\nIn response, the server returns an array of matching search results. While the content field is redacted with a placeholder string, the metadata fields remain fully intact. The attacker extracts the raw block and heading identifiers, such as LEAKED_HEADING_ID_999, directly from the JSON payload.\n\nWith these leaked identifiers, the attacker bypasses the password page by targeting the auxiliary endpoint directly. This request avoids the standard authentication routines and successfully retrieves the target block's fully rendered HTML DOM:\n\nhttp\nPOST /api/block/getHeadingChildrenDOM HTTP/1.1\nHost: target-siyuan-instance:6808\nContent-Type: application/json\n\n{\n "id": "LEAKED_HEADING_ID_999"\n}\n\n\nThe server processes this request and returns an HTTP 200 response containing the sensitive data. By repeating this process for each leaked block identifier, the attacker can systematically reconstruct the entire protected document.

Security Impact & Risk Assessment

The exploitation of CVE-2026-68584 results in a complete loss of confidentiality for any document hosted on a public SiYuan server. Because the application is designed to function as a personal knowledge base, protected files often contain sensitive information, including API keys, network diagrams, internal documentation, or personal records. Exposure of these files can lead to further compromises of connected infrastructure.\n\nThe CVSS v3.1 score is rated at 8.6 (High), reflecting the low barrier to entry for potential attackers. The vulnerability requires no prior authentication, does not depend on user interaction, and is simple to execute. The scope metric is classified as Changed (S:C) because accessing block-level metadata allows the attacker to bypass document-level authorization boundaries.\n\nFrom a threat intelligence perspective, while the vulnerability is not currently listed in the CISA KEV catalog, public proof-of-concept exploits are available. Security teams should treat any internet-exposed SiYuan server running publish mode on a vulnerable version as highly susceptible to automated scanning and opportunistic data harvesting.

Defensive Controls & Engineering Remediation

The primary and recommended remediation is to upgrade the SiYuan application to version 0.0.0-20260721020826-2d069dce84a2 or later. This release integrates the necessary authorization validation checks across all block-level retrieval routes, mitigating the alternate-path authentication bypass.\n\nIf an immediate upgrade is not possible, organizations should implement compensating network controls. Deploying a reverse proxy, such as Nginx or Apache, in front of the SiYuan publish port (typically 6808) allows administrators to restrict access to sensitive API paths. Below is a sample Nginx rule set designed to block requests to the vulnerable endpoints from unauthenticated networks:\n\nnginx\nserver {\n listen 80;\n server_name siyuan.internal;\n\n location ~* ^/api/block/getHeading(Children|Delete|Level|Insert) {\n # Restrict these endpoints to internal networks only\n allow 192.168.1.0/24;\n deny all;\n proxy_pass http://127.0.0.1:6808;\n }\n\n location / {\n proxy_pass http://127.0.0.1:6808;\n }\n}\n\n\nAdditionally, administrators can mitigate the risk by disabling the public publish mode entirely if it is not actively required. By enforcing strict firewall rules that restrict access to port 6808 to trusted VPN tunnels or local loopback interfaces, the attack surface is significantly reduced. This step prevents remote attackers from interacting with either the search or block APIs.

Official Patches

SiYuanVendor Advisory for GHSA-7j72-f6wg-cxw6

Fix Analysis (1)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
1,500
via Shodan

Affected Systems

SiYuan (Go Kernel Backend)

Affected Versions Detail

Product
Affected Versions
Fixed Version
SiYuan
siyuan-note
< 0.0.0-20260721020826-2d069dce84a20.0.0-20260721020826-2d069dce84a2
AttributeDetail
CWE IDCWE-288 (Authentication Bypass Using an Alternate Path or Channel)
Attack VectorNetwork
CVSS v3.1 Score8.6
EPSS ScoreNot available
ImpactHigh (Complete loss of confidentiality of protected documents)
Exploit StatusProof-of-Concept (PoC)
CISA KEV StatusNot listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1556Modify Authentication Process
Defense Evasion
T1083File and Directory Discovery
Discovery
CWE-288
Authentication Bypass Using an Alternate Path or Channel

The product provides more than one path or channel to access a resource or perform an action, but not all paths are protected by the same authentication checks.

Known Exploits & Detection

GitHub AdvisoryOfficial advisory detailing the security bypass chain in SiYuan publish mode.

References & Sources

  • [1]GitHub Advisory Database Entry
  • [2]SiYuan Security Advisory
  • [3]Fix Commit
  • [4]NVD CVE Details
  • [5]VulnCheck Threat Intelligence Advisory

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•33 minutes ago•CVE-2026-72803
6.9

CVE-2026-72803: Information Disclosure via Missing Authorization in SiYuan API

An information disclosure vulnerability exists in the SiYuan personal knowledge management system versions prior to v3.7.4. The application fails to enforce publish-access filters on block attribute retrieval endpoints. Consequently, unauthenticated remote attackers can bypass document-level protection rules (such as password protection or disabled-publish flags) to retrieve sensitive block-level attributes, including aliases, memos, block names, and custom metadata fields, by querying the API using guessed or known block IDs.

Alon Barad
Alon Barad
0 views•7 min read
•about 3 hours ago•CVE-2026-77465
7.5

CVE-2026-77465: Uncontrolled Recursion in toml-node Deserializer Leads to Denial of Service

An uncontrolled recursion vulnerability (CWE-674) in the toml-node NPM package (published as toml) prior to version 4.2.0 allows unauthenticated remote attackers to trigger process-wide Denial of Service (DoS) crashes. By submitting TOML payloads with deep bracket or brace nesting, attackers exhaust the V8 runtime stack limit.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 4 hours ago•CVE-2026-73295
5.4

CVE-2026-73295: DOM-based Cross-Site Scripting (XSS) in Material for MkDocs Search Suggestions

CVE-2026-73295 is a DOM-based Cross-Site Scripting (XSS) vulnerability affecting Material for MkDocs versions 7.2.0 through 9.7.6. When the optional 'search.suggest' feature is enabled, the client-side 'mountSearchSuggest' function processes user-controlled inputs from the URL 'q' parameter and writes them directly to the DOM using an unsafe innerHTML sink without sanitization.

Alon Barad
Alon Barad
4 views•6 min read
•about 5 hours ago•CVE-2026-71869
9.3

CVE-2026-71869: Remote Code Execution in Orval via OpenAPI Default Value Template Literal Injection

CVE-2026-71869 is a critical-severity code injection vulnerability in the Orval code generator (packages: orval, @orval/core, @orval/zod) prior to version 8.21.0. This flaw allows remote attackers to execute arbitrary JavaScript code at import-time by embedding malicious payloads into the default values of OpenAPI or Swagger specifications. This report details the root cause, exploitation mechanism, and patch remediation.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 6 hours ago•CVE-2026-61625
6.8

CVE-2026-61625: Arbitrary File Write via Path Traversal in VictoriaMetrics vmrestore

CVE-2026-61625 is a path traversal vulnerability (CWE-22) within the `vmrestore` utility of VictoriaMetrics. When restoring database shards from a compromised or malicious backup source, the application fails to validate the paths of backup parts before creating and writing files. By injecting objects with directory traversal sequences (such as `../`) into the remote backup storage, an attacker can write arbitrary files to out-of-bounds locations on the system executing the restore operation. Depending on the process privileges, this can result in host compromise via remote code execution.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 7 hours ago•CVE-2026-73846
6.5

CVE-2026-73846: Cache Key Canonicalization Collision in ondata ckan-mcp-server

A medium-severity cache key canonicalization collision vulnerability exists in the ckan-mcp-server prior to version 0.4.112. Unescaped delimiters in key-value parameters and server URLs allow structurally distinct requests to map to the same cryptographic hash, facilitating cache poisoning and unauthorized data exposure.

Alon Barad
Alon Barad
5 views•7 min read