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



CVE-2026-72795

CVE-2026-72795: Missing Authorization in SiYuan Block DOM Rendering

Alon Barad
Alon Barad
Software Engineer

Sep 5, 2026·5 min read·3 visits

Executive Summary (TL;DR)

Unauthenticated information exposure in SiYuan note platform allows remote anonymous attackers to view private note content via missing authorization checks in dynamic block transclusion endpoints.

CVE-2026-72795 is a critical missing authorization vulnerability (CWE-862) in SiYuan, a self-hosted personal knowledge platform. When configured in publish/read-only mode, the application fails to validate publish-access rules on dynamic child blocks transcluded via SQL queries. This allows anonymous external visitors to access hidden, password-protected, or forbidden note content.

Vulnerability Overview

The open-source personal knowledge-management platform SiYuan provides a publish feature to share notes externally. When running in self-hosted or server mode, external readers can access designated documents in a read-only capacity. The APIs responsible for retrieving block Document Object Models (DOMs), specifically /api/block/getBlockDOMWithEmbed and /api/block/getBlockDOMsWithEmbed, are exposed to allow rendering of pages containing block transclusions. This mechanism relies on dynamic SQL queries to locate and embedded child block elements.

The vulnerability is classified under CWE-862 (Missing Authorization) and manifests because the application fails to validate publish-access controls on individual child blocks fetched via dynamic queries. When resolving these transcluded structures, the backend retrieves internal blocks based on search patterns without confirming if the requesting user possesses authorization to read the parent document containing those blocks. Consequently, unauthorized users can read protected block content through public documents that embed dynamic queries.

Root Cause Analysis

The root cause of CVE-2026-72795 is an inconsistent authorization check within the Go backend rendering engine. Inside the SiYuan block model, a document is parsed into an abstract syntax tree (AST) containing nodes of type NodeBlockQueryEmbed. These nodes represent embedded blocks configured to dynamically query the internal SQLite-like database using SQL criteria. When rendering the page DOM, the engine matches these nodes and executes database queries to merge the matching sub-blocks' DOM representation into the parent page.

Although the system correctly enforces access restrictions on the parent document requested by the user, it did not apply authorization checks recursively on the blocks returned from the sub-query. When a read-only or anonymous session calls the DOM retrieval endpoints, the backend queries the database for target child blocks and merges them directly into the output payload. The server bypasses validation for whether the resolved sub-block resides in a password-protected notebook or a private document.

This missing authorization layer creates a logic flaw where any public document containing a dynamic embed block can act as an oracle. If the embedded SQL query inside the public document matches blocks from private files, the server serializes that restricted content into the DOM response. The vulnerability allows an unauthorized remote attacker to extract arbitrary text from secure, non-published notes.

Code Analysis

The core fix for CVE-2026-72795 lies in the introduction of an authorization callback interface to check publish access for embedded blocks. In kernel/api/block.go, the application now explicitly determines whether the request originates from a read-only session and initializes a validator closure:

isReadOnlyRole := model.IsReadOnlyRoleContext(c)
var publishAccess model.PublishAccess
var accessChecker model.EmbedBlockAccessChecker
if isReadOnlyRole {
    publishAccess = model.GetPublishAccess()
    accessChecker = func(blockID string) bool {
        // Verifies if the requested block ID can be accessed by the current publish access level
        return model.CheckBlockIdAccessableByPublishAccessInBox(c, publishAccess, blockID, boxID)
    }
}
dom := model.GetBlockDOMWithEmbedInBoxWithAccessChecker(id, boxID, accessChecker)

The validation logic is propagated down to the rendering code in kernel/model/block.go. Within resolveEmbedContentInBox, the returned database blocks are filtered prior to serialization:

func filterEmbedBlocksByAccess(blocks []*sql.Block, accessChecker EmbedBlockAccessChecker) (ret []*sql.Block) {
    if nil == accessChecker {
        return blocks // If no access checker is active (e.g. admin session), return all
    }
    ret = make([]*sql.Block, 0, len(blocks))
    for _, block := range blocks {
        if nil != block && accessChecker(block.ID) {
            ret = append(ret, block) // Only allow blocks that pass verification
        }
    }
    return
}

The patch ensures that blocks failing the accessChecker validation are discarded prior to DOM construction, successfully mitigating the cross-document data leakage.

Exploitation Methodology

To exploit CVE-2026-72795, an attacker must first locate a SiYuan instance with public read-only access enabled. The attacker identifies at least one public document that contains a block embed query (NodeBlockQueryEmbed). This configuration is typical for websites using SiYuan as a public CMS or documentation portal where certain pages aggregate content dynamically.

The attacker can then execute a direct HTTP POST request targeting the /api/block/getBlockDOMWithEmbed endpoint, specifying the ID of the public block. Because authorization checks are not applied to the query results, the returned payload contains the complete rendered DOM of the matching transcluded blocks in its attributes.

POST /api/block/getBlockDOMWithEmbed HTTP/1.1
Host: target-siyuan.local
Content-Type: application/json
 
{
  "id": "20260725000001-public1"
}

In a vulnerable deployment, the response contains data-type="NodeBlockQueryEmbed" with the raw HTML representing the forbidden, restricted, or password-protected content. This allows the attacker to extract arbitrary confidential information matching the query terms without needing any administrative credentials or session tokens.

Impact Assessment

The impact of CVE-2026-72795 is a severe confidentiality compromise of self-hosted SiYuan knowledge databases. An unauthorized attacker can read block content from any private, password-protected, or hidden notebook on the system if it gets matched by the dynamic block embeds. The flaw has a CVSS v4.0 score of 9.2 (Critical) and a CVSS v3.1 score of 8.6 (High), highlighting the ease of exploitation and the depth of the information exposure.

The vulnerability does not allow modification of notes (Integrity) or service disruption (Availability). However, the leakage of confidential personal data, credentials, and organizational documentation represents a critical failure of the platform's privacy-first security model. This threat is particularly acute for public-facing deployments that aggregate notes via SQL block queries.

Remediation & Mitigations

The primary remediation for CVE-2026-72795 is upgrading the SiYuan application to version 3.7.4 or later. The patch implements the mandatory authorization callbacks to ensure that public queries do not transclude unauthorized content.

If an immediate upgrade is not feasible, administrators should disable public publishing or restrict network access to the instance. This can be achieved by placing the SiYuan workspace behind an authenticating reverse proxy or VPN. Additionally, removing dynamic block embed queries (NodeBlockQueryEmbed) from public pages prevents the unauthorized database querying behavior.

Fix Analysis (1)

Technical Appendix

CVSS Score
9.2/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
EPSS Probability
0.24%
Top 85% most exploited

Affected Systems

SiYuan personal knowledge-management platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
siyuan
siyuan-note
< 3.7.43.7.4
AttributeDetail
CWE IDCWE-862 (Missing Authorization)
Attack VectorNetwork
CVSS v4.0 Score9.2
EPSS Score0.00241
Exploit StatusPoC / Technical Analysis
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-862
Missing Authorization

The software does not perform an authorization check when an actor attempts to access a resource or perform an action, resulting in data exposure to unauthorized entities.

Known Exploits & Detection

GitHub Security AdvisoryGHSA detailed advisory documenting missing authorization on transcluded blocks.

Vulnerability Timeline

Patch implemented and committed to GitHub main branch.
2026-07-25
CVE-2026-72795 officially assigned and GHSA-h6w7-xxcf-w2mq published.
2026-08-12
CVE record updated with extended CVSS 4.0 vectors.
2026-08-14
National Vulnerability Database (NVD) publishes CVSS 3.1 analysis.
2026-08-26

References & Sources

  • [1]GHSA-h6w7-xxcf-w2mq: Security Advisory
  • [2]VulnCheck Vulnerability Report
  • [3]Fix Commit 1ca1c3c

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

•8 minutes ago•CVE-2026-72799
6.9

CVE-2026-72799: Missing Authorization in SiYuan Filetree Path-Resolution API

SiYuan before v3.7.4 fails to enforce publish-access filters on five filetree path-resolution endpoints, allowing unauthenticated attackers to reconstruct private directory layouts and map document structures.

Alon Barad
Alon Barad
0 views•7 min read
•about 1 hour ago•CVE-2026-72798
9.2

CVE-2026-72798: Missing Authorization and Information Disclosure in SiYuan renderAttributeView

Prior to version v3.7.4, the SiYuan personal knowledge management system contained a critical logical authorization vulnerability within its database view rendering component. The flaws allowed unauthenticated remote attackers to bypass publish-access filters on databases, exposing sensitive Relation and Rollup cell contents belonging to private or password-protected repositories.

Amit Schendel
Amit Schendel
1 views•5 min read
•about 2 hours ago•CVE-2026-72797
6.9

CVE-2026-72797: Missing Authorization in SiYuan Notebook Metadata Endpoint

An information disclosure vulnerability exists in SiYuan prior to v3.7.4 due to missing authorization checks on the getEncryptedNotebookStatus API endpoint, allowing unprivileged or anonymous users to enumerate protected notebooks.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 3 hours ago•CVE-2026-72794
8.6

CVE-2026-72794: Cryptographic Key Leakage and Session Forgery in SiYuan

An information disclosure vulnerability in the SiYuan application exposes the global session cookie signing key via the `/api/system/getConf` endpoint. This allows unauthenticated remote attackers or low-privileged users to forge administrative session cookies and gain unauthorized access to the application kernel.

Alon Barad
Alon Barad
5 views•6 min read
•about 5 hours ago•CVE-2026-72793
8.6

CVE-2026-72793: Information Disclosure and Session Forgery in SiYuan Note-Taking Application

A critical information disclosure vulnerability in the SiYuan note-taking application allows remote attackers to retrieve sensitive configurations, including cryptographic session-cookie signing keys and absolute host system directories, leading to administrative session hijacking.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 6 hours ago•CVE-2026-72792
6.9

CVE-2026-72792: Information Disclosure via Tag API Endpoint in SiYuan

SiYuan before version v3.7.4 is affected by an information disclosure vulnerability in the `/api/tag/getTag` endpoint. Under publish mode, this endpoint returns tag labels and occurrence counts from password-protected documents to unauthenticated readers, allowing them to enumerate protected vocabulary and internal metadata without providing the document's publish password.

Amit Schendel
Amit Schendel
4 views•5 min read