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

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

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 5, 2026·5 min read·2 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can query `/api/tag/getTag` in SiYuan instances running in publish mode to extract tag vocabulary and metadata from password-protected documents.

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.

Vulnerability Overview

SiYuan is an open-source, local-first personal knowledge management system that supports fine-grained content publishing. When hosting published notebooks, users can password-protect specific documents to prevent unauthorized read access. This security control is bypassed by an incorrect authorization defect in the tag aggregation API endpoint.

The vulnerability, tracked as CVE-2026-72792, resides within the /api/tag/getTag endpoint. When the application runs in public publish mode, unauthenticated remote attackers can query this endpoint to retrieve structural metadata. The endpoint returns tag labels and occurrence counts originating from password-protected documents without validating the user's authorization status.

The underlying flaw is categorized as CWE-863 (Incorrect Authorization). By exploiting this behavior, an attacker can map sensitive vocabulary, internal terminology, and proprietary metadata. This compromises the confidentiality boundaries established by the notebook author.

Root Cause Analysis

The root cause of CVE-2026-72792 is a logical omission during authorization checks in the tag processing workflow. The core logic handles read-only requests by retrieving document visibility states. However, it fails to evaluate whether target documents are protected by passwords.

When a client queries /api/tag/getTag, the server determines if the request context represents a restricted public reader. If this evaluation evaluates to true, the application filters the returned tag array. The legacy filtering logic relied on the FilterTagsByPublishIgnore function, which only inspected if document paths were explicitly marked as invisible or completely unpublished.

Because the system omitted checks for password-protection states during this aggregation, database queries extracted tag spans across all published documents. The application compiled these tags and served the structured response directly to unauthenticated visitors. The system assumed that because a document was published, its tag structure was public, neglecting the access restriction enforced by the document's password.

Code-Level Patch Analysis

To understand the technical mechanics, compare the insecure implementation with the corrected logic implemented in version v3.7.4. The legacy implementation in kernel/model/publish_access.go was structured as follows:

// Legacy Vulnerable Filter in kernel/model/publish_access.go
func FilterTagsByPublishIgnore(publishIgnore PublishAccess, tags *Tags) (ret *Tags) {
    spans := sql.QueryTagSpans("")
    labelCounts := make(map[string]int)
    for _, span := range spans {
        // Only checks if the document is ignored or invisible
        if CheckPathAccessableByPublishIgnore(span.Box, span.Path, publishIgnore) {
            label := util.UnescapeHTML(span.Content)
            labelCounts[label] += 1
        }
    }
    ret = &Tags{}
    // ... constructs and returns tags
}

The patch introduced FilterTagsByPublishAccess to properly enforce authorization checks based on session cookies. The corrected implementation validates the existence of active password sessions:

// Patched Implementation (v3.7.4+)
func filterTagsByPublishAccess(c *gin.Context, publishAccess PublishAccess, tags *Tags, spans []*sql.Span) (ret *Tags) {
    publishInvisible := GetInvisiblePublishAccess(publishAccess)
    publishDisable := GetDisablePublishAccess(publishAccess)
    labelCounts := make(map[string]int)
    for _, span := range spans {
        // 1. Verify document path is neither invisible nor disabled
        if !CheckPathAccessableByPublishIgnore(span.Box, span.Path, publishInvisible) ||
            !CheckPathAccessableByPublishIgnore(span.Box, span.Path, publishDisable) {
            continue
        }
        // 2. Retrieve password configuration for the document path
        passwordID, password := GetPathPasswordByPublishAccess(span.Box, span.Path, publishAccess)
        // 3. Enforce auth check if password protection is enabled
        if password != "" && !CheckPublishAuthCookie(c, passwordID, password) {
            continue
        }
        label := util.UnescapeHTML(span.Content)
        labelCounts[label] += 1
    }
    ret = &Tags{}
    // ... constructs and returns authorized tags
}

By querying GetPathPasswordByPublishAccess and applying CheckPublishAuthCookie, the patched engine discards tag nodes when the requesting client has not provided the correct document password.

Exploitation Methodology

Exploitation of CVE-2026-72792 requires no authentication and can be completed via simple HTTP requests. An attacker first scans for a target SiYuan notebook server operating in publish mode. The attacker then targets the endpoint /api/tag/getTag using standard HTTP clients.

The request payload consists of an empty JSON object sent via a POST request. The server parses the request and initiates the database query to aggregate tag spans. Because the vulnerable server does not check document-level passwords, the database retrieves and returns all tags.

POST /api/tag/getTag HTTP/1.1
Host: target.siyuan.instance
Content-Type: application/json
 
{}

The response contains a JSON payload containing tag labels and their total occurrence counts. Even if a document named Secret_Project_Plan.sy is password-protected, labels like Project-Mercury, merger-target-corp, or vulnerability-disclosures are leaked. This allows the attacker to reconstruct the outline, vocabulary, and contents of the protected workspace.

Impact Assessment & Cryptographic Limitations

The security impact of CVE-2026-72792 is defined as low-to-moderate information disclosure. While the vulnerability does not directly permit remote code execution, it leaks internal metadata that can facilitate highly targeted attacks or expose confidential business strategies.

Beyond metadata leakage, an analysis of the patch reveals potential cryptographic weaknesses in how SiYuan authorizes readers. The helper function CheckPublishAuthCookie verifies access by checking a client-supplied cookie value against a SHA-256 hash. This hash is constructed deterministically from predictable components:

$$\text{Cookie Value} = \text{SHA256}(\text{Document ID} + \text{Document Password})$$

Because the application uses a static SHA-256 hash without an application-wide salt or dynamic session state, it is vulnerable to offline dictionary attacks. If an attacker recovers the document ID from the public interface, they can generate candidate password hashes offline. Once they match the cookie signature, they bypass document access controls completely.

Mitigation & Remediation Guidance

The primary remediation path for CVE-2026-72792 is upgrading the SiYuan application to version v3.7.4 or later. This version replaces the insecure tag aggregation flow with authenticated path validation.

Administrators who cannot immediately upgrade should implement temporary access restrictions. Disable publish mode completely if sensitive documents are hosted on the instance. Alternatively, configure reverse proxies or Web Application Firewalls (WAF) to block external access to /api/tag/getTag and other administrative API endpoints.

# Nginx block rule example
location = /api/tag/getTag {
    deny all;
    return 403;
}

Reviewing the integrity of active document passwords is also recommended. Since the authorization cookies are generated deterministically, administrators must ensure that password-protected notebooks use strong, high-entropy passwords to prevent offline brute-force attacks on the SHA-256 cookie generation routine.

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-863
Attack VectorNetwork
CVSS Score6.9 (Medium)
EPSS Score0.00237 (Percentile: 14.53%)
ImpactInformation Disclosure (Metadata Leakage)
Exploit StatusPoC available
KEV StatusNot listed in CISA KEV

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly execute the authorization check, allowing attackers to access restricted resources or bypass access controls.

Known Exploits & Detection

GitHub Security AdvisoryOfficial security advisory containing details on the tag leak vulnerability.

Vulnerability Timeline

Vulnerability patched in commit 4515fa257cfae2db0a43844c61de8ef1ac853796
2026-07-26
CVE-2026-72792 published and GHSA-mp7r-57w4-5qm3 released
2026-08-12
CVE record updated with enriched analysis
2026-08-14

References & Sources

  • [1]GitHub Security Advisory GHSA-mp7r-57w4-5qm3
  • [2]SiYuan Fix Commit 4515fa257cfae2db0a43844c61de8ef1ac853796
  • [3]VulnCheck Advisory for SiYuan
  • [4]CVE-2026-72792 on CVE.org

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

•4 minutes 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
0 views•6 min read
•about 2 hours ago•CVE-2026-71486
4.3

CVE-2026-71486: Uncontrolled Resource Consumption in vLLM Derender Endpoints

CVE-2026-71486 (GHSA-8737-qx52-hjff) is an uncontrolled resource consumption vulnerability in vLLM's derender endpoints before version 0.26.0. An authenticated attacker can supply crafted, deeply nested token structures to exhaust CPU and memory resources, resulting in server denial of service (DoS) or Out of Memory (OOM) crashes. This vulnerability stems from missing input-bounds validation before passing user-supplied structures to computationally intensive decoding routines.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 3 hours ago•CVE-2026-73555
5.3

CVE-2026-73555: Environment and Information Disclosure via Exception Handling in vLLM

An information disclosure vulnerability in vLLM prior to version 0.26.0 allows unauthenticated remote attackers to trigger validation errors that expose highly sensitive host machine metadata, absolute paths, environment structures, and usernames. This flaw stems from improper serialization of Pydantic exceptions and an inadequate fallback sanitization function.

Alon Barad
Alon Barad
3 views•5 min read
•about 4 hours ago•CVE-2026-73556
5.3

CVE-2026-73556: Regular Expression Denial of Service (ReDoS) in vLLM lm-format-enforcer Backend

CVE-2026-73556 is a Regular Expression Denial of Service (ReDoS) vulnerability in the vLLM inference engine's lm-format-enforcer structured-output backend. Prior to version 0.26.0, lack of compilation timeouts or complexity validation for user-supplied regular expressions in the structured_outputs.regex parameter allowed unauthenticated remote attackers to trigger CPU exhaustion and block the core execution loop.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 5 hours ago•CVE-2026-73557
6.3

CVE-2026-73557: Race Condition in PyTorch Tensor Invariant Checks within vLLM Engine

CVE-2026-73557 details a race condition vulnerability in the vLLM serving framework, arising from the thread-unsafe usage of PyTorch's process-global sparse tensor invariant check manager. When processing concurrent requests with custom prompt or multimodal embeddings, concurrent thread execution can disable global tensor integrity checks. An unauthenticated attacker can leverage this timing window to submit malformed sparse coordinate (COO) tensors containing out-of-bounds indices, causing memory corruption and process crashes (Denial of Service).

Alon Barad
Alon Barad
4 views•5 min read
•about 6 hours ago•CVE-2026-73842
9.0

CVE-2026-73842: Missing Authentication and Authorization on Internal Management Listener in OpenChoreo cluster-gateway

A critical-severity missing authentication and privilege management vulnerability was identified in the OpenChoreo cluster-gateway component. The gateway exposed internal management endpoints, including arbitrary Kubernetes proxying and execution interfaces, on an unauthenticated port. An adjacent attacker within the control-plane network can bypass RBAC controls entirely and gain administrative control over all connected data planes.

Alon Barad
Alon Barad
5 views•6 min read