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

CVE-2026-72804: Authentication Bypass and Sensitive Information Exposure in SiYuan Graph Endpoints

Alon Barad
Alon Barad
Software Engineer

Sep 4, 2026·7 min read·50 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can query SiYuan's graph endpoints to bypass password protection and extract private document contents and linkages.

SiYuan before version 3.7.4 contains an authentication bypass vulnerability within its graph visualization API endpoints, allowing unauthenticated remote attackers to extract sensitive node metadata and content from password-protected documents.

Vulnerability Overview and Architectural Context

The SiYuan knowledge management platform is an open-source personal knowledge management system designed to run as a local desktop tool or a self-hosted cloud service. To enable seamless collaboration and knowledge sharing, SiYuan offers a native 'Publish Mode' that exports local notebooks into interactive web interfaces. This capability exposes an external attack surface, as self-hosted instances are frequently connected to public networks to allow remote access for colleagues or public readers.

To manage access controls within this shared model, SiYuan implements a tier-based publishing security schema. Users can designate specific documentation trees as fully public, password-protected, or hidden. The password-protection tier is designed to present an authentication challenge, blocking anonymous users from viewing document indexes, markdown content, and associated assets while keeping the document metadata visually structured in the notebook's navigation map.

Under the hood, SiYuan relies on API endpoints to dynamically render graph layouts that show connections between thoughts, tags, and files. Two primary endpoints, /api/graph/getGraph and /api/graph/getLocalGraph, compile relationship maps based on references found in the notes database. However, prior to version 3.7.4, these endpoints lacked integration with the password authorization layer, leaving a critical gap in the platform's multi-tier access architecture.

Root Cause and Token Validation Failure

The root cause of CVE-2026-72804 is located within the API handler functions defined in kernel/api/graph.go. When processing graph serialization requests, the backend constructs node networks where individual elements correspond to physical files, block paragraphs, or metadata tags. These nodes are populated with real content extracted from the underlying markdown files, including document headers, titles, and text snippets used for visualization labels.

In affected versions, the authorization checks for these graph queries relied exclusively on a simple blacklist filtering mechanism. The handlers invoked model.GetInvisiblePublishAccess to identify files configured as completely hidden (Visible: false) and filtered them out via FilterGraphByPublishIgnore. However, the code failed to execute any verification checks on files configured with the password-protection tier (Visible: true but protected by a cryptographic hash verification).

Because the graph handler functions were stateless with respect to the user's session and did not read client authentication state, they processed and formatted protected notes indiscriminately. Consequently, an anonymous request to the graph endpoints forced the server to serialize the internal contents of all password-protected notes. The resulting API response contained sensitive paragraph blocks, exposing information directly to unauthorized requestors in violation of CWE-200 rules.

Source Code Diff and Patch Deep-Dive

The security patch committed in version 3.7.4 refactors the graph-filtering pipeline to use a context-aware authorization model. In the vulnerable version, the graph endpoints did not receive the Gin context container *gin.Context within the model's core filtering utility. This prevented the application from verifying if the client possessed the necessary browser cookies confirming a successful password submission.

// Patch snippet in kernel/api/graph.go
- publishIgnore := model.GetInvisiblePublishAccess(publishAccess)
- nodes, links = model.FilterGraphByPublishIgnore(publishIgnore, nodes, links)
+ nodes, links = model.FilterGraphByPublishAccess(c, publishAccess, nodes, links)

The refactored function, FilterGraphByPublishAccess, dynamically queries the client's HTTP cookie jar for each node mapped during graph rendering. When a node's path is associated with a password-protected document, the system extracts the password salt from the server config and calls CheckPublishAuthCookie using the context object c. If the client does not provide the matching SHA-256 cookie, the server excludes the node from the returned array.

// Validation logic inside kernel/model/publish_access.go
passwordID, password := GetPathPasswordByPublishAccess(node.Box, node.Path, publishAccess)
if password != "" && !CheckPublishAuthCookie(c, passwordID, password) {
    continue // Rejects unauthorized graph nodes dynamically
}

Furthermore, the patch implements a cascading cleanup phase. If a node is eliminated due to authorization failure, the engine automatically removes all downstream link components referencing that specific node. This ensures that metadata about hidden nodes (such as connection weights or size parameters) does not leak to unauthorized clients through remaining edge elements.

Attack Path and Proof-of-Concept Verification

To exploit CVE-2026-72804, an attacker does not require special administrative privileges or pre-existing credentials. The attack is entirely unauthenticated and can be conducted using basic command-line utilities. An external attacker first scans public instances of SiYuan, identifying self-hosted sites that expose a public interface containing protected folders.

Instead of accessing the frontend, which handles authorization via form dialogs and cookie validation, the attacker targets the graph serialization endpoint directly. By issuing an unauthenticated HTTP POST request to the /api/graph/getGraph endpoint, the attacker forces the backend to compile the node topology. The payload requires no special parameter headers and can be sent with an empty JSON object.

curl -s -X POST http://siyuan.target/api/graph/getGraph \
     -H "Content-Type: application/json" \
     -d '{}' | jq .

The server responds with a complete layout of the graph database, bypassing the front-end login wall entirely. Within the returned JSON response, the data.nodes array lists every active node in the document hierarchy. Attackers can parse the resulting block-level elements to retrieve private journal entries, embedded keys, system passwords, and the overall linkage structure of the restricted pages.

Impact and Risk Assessment

The severity of CVE-2026-72804 is rated as Critical with a CVSS v4.0 base score of 9.2. This high rating is a direct consequence of the complete lack of authorization checks on a public API endpoint, which allows unauthenticated remote actors to bypass access controls without user interaction. The vulnerability has a severe impact on the confidentiality of user deployments, particularly those containing sensitive commercial or personal intellectual property.

From an adversarial standpoint, the vulnerability maps directly to collection techniques such as T1005 (Data from Local System) and credential access techniques such as T1552 (Unsecured Credentials). Users frequently store infrastructure access credentials, SSH keys, private keys, and environment variables within password-protected blocks. Because this information is serialized inside node titles and labels, exploitation leads to direct leakage of critical administrative secrets.

Moreover, the leakage of the complete reference topology allows adversaries to conduct advanced profiling of the targeted system. By analyzing the structural connections between hidden documents and public indices, attackers can deduce internal organizational charts, product development cycles, or sensitive system relationships. This structural information acts as a force multiplier for subsequent targeted attacks or social engineering campaigns.

Remediation and Defenses

The absolute mitigation for CVE-2026-72804 is to update the SiYuan platform to version 3.7.4 or later. This release completely patches the vulnerability by enforcing server-side authorization checks on all graph-related API handlers. Deployments running inside containerized environments should verify that their Docker compose files pull the updated image and restart the platform services to apply the security controls.

When immediate patching is impossible, network-level workarounds can protect vulnerable deployments. Administrators should implement request-filtering policies within an upstream reverse proxy or Web Application Firewall (WAF) to block external traffic directed to the vulnerable endpoints. Setting rules in Nginx, Caddy, or Apache to deny external access to /api/graph/getGraph and /api/graph/getLocalGraph will prevent direct exploitation without affecting normal document reading.

# Upstream block in reverse proxy config
location ~ ^/api/graph/(getGraph|getLocalGraph)$ {
    deny all;
    return 403;
}

Additionally, users can mitigate immediate exposure by modifying the publishing configurations of sensitive documents. Transitioning the status of critical folders from 'Password Protected' to 'Hidden' ensures they are completely excluded from the graph compiling process by the legacy FilterGraphByPublishIgnore mechanism. Security teams should also inspect proxy logs for any unexpected POST requests targeting graph endpoints that yield successful HTTP 200 responses without matching authentication cookies.

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.26%
Top 83% most exploited

Affected Systems

SiYuan Knowledge Management Platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
siyuan
siyuan-note
< 3.7.43.7.4
AttributeDetail
CWE IDCWE-200
Attack VectorNetwork (AV:N)
CVSS v4.0 Score9.2 (Critical)
EPSS Score0.00255 (16.82%)
ImpactConfidentiality Exposure (High)
Exploit StatusPoC Available / Verified
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1005Data from Local System
Collection
T1552Unsecured Credentials
Credential Access
CWE-200
Exposure of Sensitive Information to an Unauthorized Actor

The product exposes sensitive information to an actor who is not explicitly authorized to have access to that information.

Vulnerability Timeline

Patch committed to repository
2026-07-24
CVE-2026-72804 Published & GHSA-vpjw-wf5h-cgpq disclosed
2026-08-12

References & Sources

  • [1]GitHub Security Advisory GHSA-vpjw-wf5h-cgpq
  • [2]VulnCheck Intelligence Advisory
  • [3]Patch Commit
  • [4]NVD Portal
  • [5]CVE.org Portal

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

•about 1 hour ago•CVE-2026-114132
6.3

CVE-2026-114132: Case-Sensitivity Route Rule Bypass in Nuxt Framework

Nuxt versions prior to 4.6.2 suffer from a route rule bypass vulnerability caused by an architectural mismatch in case-sensitivity handling between the Nitro server runtime and the Vue page router. An unauthenticated remote attacker can bypass server-enforced route directives—such as redirects, security headers, and SSR controls—by altering character casing in HTTP request paths.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 2 hours 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
14 views•4 min read
•about 3 hours 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
10 views•5 min read
•about 3 hours 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
12 views•6 min read
•about 3 hours 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
4 views•5 min read
•10 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