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-72803

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

Alon Barad
Alon Barad
Software Engineer

Sep 3, 2026·7 min read·2 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can bypass document-level protection rules (such as passwords or disabled-publish states) to read sensitive block metadata by directly querying the `getBlockAttrs` and `batchGetBlockAttrs` endpoints with known block IDs.

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.

Vulnerability Overview

SiYuan is an open-source, privacy-focused personal knowledge management system that utilizes a local-first block-oriented architecture. The software allows users to structure documents into individual, nested components called blocks, which are stored in a database backend. To support public-facing applications such as personal blogs or knowledge wikis, SiYuan contains features to selectively publish documents or restrict access via passwords and disabled-publish flags.

The attack surface lies in the Web API endpoints exposed by the Go-based backend. Specifically, the endpoints responsible for retrieving block-level attributes fail to check the authorization status of the parent document. These endpoints, namely /api/attr/getBlockAttrs and /api/attr/batchGetBlockAttrs, are accessible over the network and allow clients to query metadata about database blocks.

Due to a missing authorization check, classified under CWE-862, unauthenticated remote attackers can directly query these endpoints to read block attributes from restricted, password-protected, or completely unpublished documents. The vulnerability bypasses the document-level publication restrictions enforced in the standard user interface. The system returns the sensitive attributes if the attacker can present the target block ID.

The impact of this vulnerability is limited to information disclosure of block-level attributes. It does not permit the modification of data or the execution of arbitrary commands. However, because custom block attributes often contain metadata, memos, and structural design notes, the disclosure can lead to substantial exposure of proprietary information.

Root Cause Analysis

The fundamental flaw stems from an incomplete access control design in the Go backend controller layer. SiYuan implements document accessibility filters to determine whether a reader has authorization to access specific document trees. These restrictions are defined inside the model.PublishAccess configuration structure, which tracks whether a document is disabled from publishing or password-protected.

When a standard request for a document occurs, the application verifies the requester's permissions against the parent document ID. If the document is marked as disabled-publish or requires a password that has not been supplied, the backend blocks the query. However, the block attribute subsystem represents a secondary query mechanism that operates independently of the document-rendering pipeline.

Each block contains an Internal Attribute Layout (IAL) structure that holds metadata. These attributes include human-readable names, custom aliases, private memos, and arbitrary user-defined key-value attributes. The underlying database stores these key-value pairs associated with the block ID, without dynamically maintaining the authorization context of the parent document.

The vulnerable endpoints /api/attr/getBlockAttrs and /api/attr/batchGetBlockAttrs are mapped directly to database queries. Prior to version 3.7.4, the controller functions invoked the SQL query interface directly using the attacker-supplied block ID. The server failed to trace the block ID back to its parent document ID and did not execute the publication-access validation checks, leading to a complete bypass of the document-level security posture.

Code Analysis

The core vulnerability was located in the file kernel/api/attr.go. In affected versions prior to v3.7.4, the API handlers did not invoke any filter functions on the incoming user parameters. The data was passed directly to the database layer as shown below.

// Vulnerable implementation of batchGetBlockAttrs
func batchGetBlockAttrs(c *gin.Context) {
    // ... input extraction ...
    for _, id := range ids {
        idList = append(idList, id.(string))
    }
    // Direct database query without checking block permissions
    ret.Data = sql.BatchGetBlockAttrs(idList)
}

To resolve this issue, the patch introduced in commit 229fdffd7e4afdef543d4d8495657fda8a369400 implements explicit filtering. For single-block requests, the handler now calls checkBlockPublishAccess. For batch requests, it utilizes filterBlockIDsByPublishAccess.

// Patched implementation of batchGetBlockAttrs
func batchGetBlockAttrs(c *gin.Context) {
    // ... input extraction ...
    for _, id := range ids {
        idList = append(idList, id.(string))
    }
    // Patch: Filter IDs based on current session publish-access permissions
    idList = filterBlockIDsByPublishAccess(c, idList, "")
    ret.Data = sql.BatchGetBlockAttrs(idList)
}

The function checkBlockPublishAccess determines whether the parent document associated with the specified block ID is accessible to the current session role. If the document is restricted and the current session is unauthenticated, the request terminates immediately, preventing execution of the database call. In the batch handler, the filterBlockIDsByPublishAccess helper removes restricted block IDs from the slice, ensuring that only public or authorized blocks are queried in the database.

Exploitation

Exploitation of CVE-2026-72803 does not require active session authentication or complex delivery payloads. The primary prerequisite is the acquisition or deduction of valid block IDs. Attackers can obtain target block IDs through several vectors, such as scraping public assets, analyzing client-side Javascript code, extracting historical search engine caches, or observing link paths shared in public forums.

Once an attacker possesses a target block ID, they can construct a structured JSON request targeting the endpoint /api/attr/getBlockAttrs. The application parses the request payload and processes the query under the security context of the current requester, which defaults to the lowest privilege level if no session tokens or API keys are present.

An example exploitation query targeting the single-block endpoint uses a standard HTTP POST method:

POST /api/attr/getBlockAttrs HTTP/1.1
Host: target.siyuan.local
Content-Type: application/json
 
{
  "id": "20260724000002-secret1"
}

The server responds with the requested attribute values, completely bypassing the document-level password protect configuration or disabled-publish status. If the block contains sensitive internal variables, names, or structural maps, these values are returned within the data field of the JSON response payload.

Impact Assessment

The security consequences of CVE-2026-72803 are classified as moderate, yielding a CVSS v4.0 base score of 6.9. The main impact is the loss of confidentiality for block-level metadata. Because this vulnerability does not allow an attacker to write, modify, or delete database elements, system integrity and availability remain unaffected.

Although block content is not directly returned by this endpoint, block attributes often contain substantial exposure risks. Users frequently leverage block-level memos to store design specifications, developer tasks, or security observations. Furthermore, custom aliases and user-defined fields can expose application credentials, external reference links, or system configuration keys.

The CVSS v3.1 rating is calculated at 5.8, reflecting network-based, low-complexity, unauthenticated access. The subsequent system confidentiality impact is categorized as low because the data leakage is confined to the metadata properties of the blocks rather than the entire document block-tree contents.

There is currently no evidence of active exploitation of this vulnerability in the wild. It is not listed in the CISA Known Exploited Vulnerabilities catalog, and the EPSS score is 0.00237, which indicates a low probability of near-term exploitation. Nonetheless, self-hosted instances configured for public distribution remain exposed until patched.

Remediation

The recommended and most secure remediation strategy is to upgrade the SiYuan application to version v3.7.4 or later. This release integrates the authorization check helper functions directly into the vulnerable API pathways in kernel/api/attr.go. Users deploying SiYuan via Docker should pull the latest image version and recreate the container to apply the patch.

If immediate patching is unfeasible due to deployment constraints or change-control freezes, administrators can implement network-level workarounds. Using a reverse proxy such as Nginx or Caddy, administrators should block external access to the vulnerable API routes. The following Nginx directive restricts POST requests to these endpoints to authorized IP addresses:

location ~* ^/api/attr/(getBlockAttrs|batchGetBlockAttrs)$ {
    allow 192.168.1.0/24;
    deny all;
    proxy_pass http://siyuan_backend;
}

Additionally, content authors should review the distribution of sensitive data within self-hosted instances. Removing sensitive notes from block-level memos and custom metadata keys in workspaces shared in public-facing modes minimizes exposure. Regular log analysis targeting HTTP requests to the /api/attr/ namespace helps detect scanning and exploit attempts.

Fix Analysis (1)

Technical Appendix

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

Affected Systems

SiYuan Personal Knowledge Management System

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 Score6.9 (Medium)
EPSS Score0.00237 (0.237%)
ImpactPartial Confidentiality Loss
Exploit StatusProof-of-Concept
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.

Known Exploits & Detection

VulnCheckExploit description detailing the missing authorization validation and query vectors.

References & Sources

  • [1]SiYuan Security Advisory GHSA-qvq9-hq6p-v378
  • [2]VulnCheck Security Advisory Page
  • [3]Official Patch Commit

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

•17 minutes ago•CVE-2026-72800
5.8

CVE-2026-72800: Missing Authorization in SiYuan Personal Knowledge Management System

A security vulnerability in the SiYuan local-first personal knowledge management system allows unauthenticated remote attackers to bypass logical boundary controls in publish (read-only) mode. By interacting with endpoints that lack proper publish-access validation, an attacker can disclose the application's internal database schemas and harvest block IDs across both public and private notebooks. This metadata leakage compromises the confidentiality of restricted documents and provides foundational information for targeted extraction.

Alon Barad
Alon Barad
0 views•5 min read
•about 2 hours ago•GHSA-7J72-F6WG-CXW6
8.6

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

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.

Alon Barad
Alon Barad
1 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