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

CVE-2026-72808: Unauthorized PDF Annotation Access in SiYuan Knowledge Management System

Alon Barad
Alon Barad
Software Engineer

Sep 4, 2026·6 min read·21 visits

Executive Summary (TL;DR)

Unauthenticated or read-only users can bypass asset-level restrictions to retrieve sensitive PDF annotations from unpublished or password-protected documents.

An information disclosure vulnerability in the SiYuan knowledge management system versions up to and including v3.7.2 allows remote unauthorized attackers to retrieve PDF annotations via the /api/asset/getFileAnnotation endpoint due to missing authorization checks.

Vulnerability Overview

The SiYuan knowledge management system supports local and published notebook configurations. Users can upload assets, including PDF documents, and annotate them using built-in annotation features. These annotations are stored as separate .sya files. The system implements access-control policies on the root notebook assets, ensuring that unauthorized readers cannot retrieve them if the notebook is private or password-protected.

The vulnerability resides within the /api/asset/getFileAnnotation HTTP API endpoint, which is mapped inside the kernel codebase of SiYuan. This endpoint is exposed to facilitate the retrieval of annotation metadata for a specific document path. However, in vulnerable versions of the application, the endpoint only relies on generic application authentication filters rather than validating granular object-level access controls.

Consequently, an unauthenticated user (if publishing is configured without global authentication) or a read-only viewer can target this API endpoint directly. If the attacker has knowledge of or is able to guess the storage path of a private PDF document, they can fetch its annotations. This bypasses the access controls established for the underlying PDF asset.

Root Cause Analysis

The root cause of CVE-2026-72808 is a missing authorization check (CWE-862) inside the file annotation retrieval mechanism. When a request is dispatched to /api/asset/getFileAnnotation, the routing layer verifies general identity context through CheckAuth or basic middleware. Once authenticated, the execution path transfers control directly to the handler function getFileAnnotation inside kernel/api/asset.go.

Within the vulnerable implementation, the input path string is processed to locate the targeted asset file using the helper utility resolveFileAnnotationAbsPath. This function strips the .sya extension, resolves the logical path within the respective storage box, and appends the suffix back to identify the target filesystem location. The handler then checks for file existence and immediately returns the file's binary content to the client.

This design fails to perform any verification against the publish access rules associated with the primary PDF document. While access to the PDF itself via /assets/* routes is blocked by the application's core access control matrix, the annotation endpoint treats the requested resource as an isolated path. Because of this logical separation, the server serves the document's annotations without assessing if the client is permitted to view the underlying parent file.

Code Analysis

The vulnerability patch was applied in commit 509b35055940856ec1c89cb4888723c4660b776a. The core architectural change introduces multi-value returns in the path resolution handler to isolate both the asset path and the annotation path, enabling object-level authorization checking prior to file access.

// Patched Path Resolution Function in kernel/api/asset.go
func resolveFileAnnotationAbsPath(assetRelPath string) (annotationAbsPath, assetAbsPath string, err error) {
	// The .sya is at the end of the URL, e.g., assets/a.pdf?box=<id>.sya
	filePath := strings.TrimSuffix(assetRelPath, ".sya")
	assetAbsPath, err = model.GetAssetAbsPathInBox(filePath, "")
	if err != nil {
		return
	}
	annotationAbsPath = assetAbsPath + ".sya"
	return
}

In getFileAnnotation, the updated handler evaluates whether the requester is operating under a restricted read-only role using model.IsReadOnlyRoleContext(c). If this condition evaluates to true, the program retrieves the current publish configurations and issues a specific access-check function:

if model.IsReadOnlyRoleContext(c) {
	publishAccess := model.GetPublishAccess()
	if !model.CheckAbsPathAccessableByPublishAccess(c, assetAbsPath, publishAccess) {
		ret.Code = http.StatusForbidden
		ret.Msg = http.StatusText(http.StatusForbidden)
		return
	}
}

This logic enforces that unauthenticated or guest sessions must have explicit publish permissions to the parent asset file. If the access check fails, the handler halts execution and returns an HTTP 403 Forbidden status. This prevents the server from proceeding to the file-reading stage, remediating the direct access vector.

Exploitation Methodology

An attacker seeking to exploit CVE-2026-72808 must satisfy specific environment and knowledge prerequisites. The target SiYuan deployment must have active public network access or publish capabilities enabled. Furthermore, the targeted resource must reside inside a non-encrypted storage block, as the vulnerability does not allow bypassing encryption boundaries.

The primary barrier to successful exploitation is acquiring the logical asset path of the target document. Because asset filenames are typically randomized or generated programmatically during insertion, brute-forcing is the primary constraint. However, if paths are exposed through other leakage channels, or if guessing is feasible, exploitation can be initiated.

The exploit is conducted by sending an HTTP POST request directly to the API routing endpoint. Below is a conceptual representation of the structure required for an exploit payload:

POST /api/asset/getFileAnnotation HTTP/1.1
Host: target-siyuan-instance:6806
Content-Type: application/json
 
{
  "path": "assets/confidential_document.pdf?box=20261024090123-abc1234.sya"
}

Upon receiving this request, a vulnerable server will process the payload, convert the path via the unpatched helper, bypass authorization checks, and return the .sya data. The returned structure contains cleartext information including highlighted document text, user-written margins, and structural metadata of the document.

Impact Assessment

The impact of CVE-2026-72808 is restricted to the unauthorized disclosure of information. It does not provide remote code execution, server-side request forgery, or administrative write access to the host server. The integrity and availability of the files remain unaffected.

Despite these limitations, the confidentiality impact can be significant for environments utilizing SiYuan for sensitive document storage. Annotations often contain direct quotes, editorial critiques, or sensitive clarifications of private legal, financial, or personal documents. The exposure of these comments effectively compromises the confidentiality boundary of the host notebook.

The vulnerability has been evaluated with a CVSS v4.0 base score of 6.9, emphasizing that the attack can be launched over the network with low complexity and no user interaction. The EPSS score is currently low, indicating that widespread automated exploitation is unlikely due to the requirement of knowing the asset paths beforehand.

Detection & Remediation

Detection of exploit attempts requires reviewing proxy and application access logs. Administrators should analyze incoming traffic for unexpected POST requests directed at /api/asset/getFileAnnotation. High frequencies of these requests from unauthenticated or read-only source IP addresses represent potential path-guessing or scanning activity.

The recommended remediation is to upgrade the SiYuan application deployment to version 3.7.4 or later. This introduces the authorization check in the API handler.

If immediate patching is not possible, defensive mitigations can be applied at the network or reverse proxy layer. Administrators can write rules in Nginx, Cloudflare, or local web application firewalls (WAF) to block requests to /api/asset/getFileAnnotation originating from untrusted networks:

# Nginx block to restrict the file annotation endpoint
location /api/asset/getFileAnnotation {
    allow 127.0.0.1;
    allow 192.168.1.0/24;
    deny all;
}

Additionally, organizations should avoid storing highly confidential information in unencrypted notebooks. Utilizing SiYuan's native encrypted box feature ensures that data remains protected even if direct filesystem-level retrieval vulnerabilities are discovered.

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.28%
Top 80% most exploited

Affected Systems

SiYuan

Affected Versions Detail

Product
Affected Versions
Fixed Version
SiYuan
siyuan-note
<= v3.7.2v3.7.4
AttributeDetail
CWE IDCWE-862 (Missing Authorization)
Attack VectorNetwork
CVSS v4.0 Score6.9 (Medium)
EPSS Score0.00283 (Percentile: 20.46%)
ImpactInformation Disclosure (Access to PDF Annotations)
Exploit StatusNo public functional exploit
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-862
Missing Authorization

The product does not perform an authorization check when an actor attempts to access a resource or perform an action.

References & Sources

  • [1]GitHub Security Advisory (GHSA-v7ph-r5r6-4jcj)
  • [2]GitHub Commit 509b350
  • [3]VulnCheck Security 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

•30 minutes ago•GHSA-78G4-XQWV-Q3G8
7.5

GHSA-78G4-XQWV-Q3G8: Heap-Based Buffer Overflow in Pillow (libopenjp2)

A heap-based buffer overflow vulnerability in Pillow PyPI binary wheels (versions 11.1.0 to 12.x) allows remote code execution or application crash via crafted JPEG 2000 files processed by the bundled libopenjp2 library.

Alon Barad
Alon Barad
2 views•4 min read
•about 1 hour ago•CVE-2026-109618
9.8

CVE-2026-109618: Remote Code Execution in PHP Core via Out-of-Memory longjmp() Uninitialized Memory Access

CVE-2026-109618 (dubbed PHP2Shell) is a critical vulnerability in the PHP engine core resulting from improper out-of-memory exception handling via longjmp(). When request allocation fails mid-processing, non-local control flow bypasses cleanup procedures, leaving memory structures uninitialized or in a use-after-free state during request shutdown.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 1 hour ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
10 views•6 min read
•about 1 hour ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
3 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•10 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read