CVE-2026-72810: SiYuan: WebSocket leak bypasses publish access control

GHSA-mw8r-mw84-88v2HIGHPoC AVAILABLECISA: TRACK*
Published September 3, 2026
CISO Take

SiYuan's publish-mode WebSocket channel (port 6808) admits anonymous "reader" sessions into the same broadcast pool as authenticated clients, so any anonymous socket held open receives a real-time, unfiltered stream of every document edit — titles, block content, notebook names, and structure — including for password-protected and unpublished notes, because the kernel's broadcast functions never apply the publish-access checks that gate the equivalent HTTP endpoints. With 2,997 downstream dependents and a CVSS of 8.6 (confidentiality-only, no privileges or user interaction required), this is a trivial-to-exploit disclosure for any SiYuan instance running publish mode with auth disabled or permissively configured; EPSS sits at just 0.31% (76th percentile) and it's not in CISA KEV or paired with a public exploit or Nuclei template, so mass exploitation isn't underway, but the PoC is a one-line WebSocket connect held open during ordinary admin activity. Patch to the fixed kernel build (commit ba948639d7f6, per GHSA-mw8r-mw84-88v2) immediately on any internet-facing publish instance; until patched, keep `Publish.Auth.Enable=true` or restrict port 6808 at the network layer, and monitor for anomalous long-lived `/ws` connections from unauthenticated clients.

Sources:NVDGitHub AdvisoryEPSS

What is the risk?

High-severity (CVSS 8.6), trivially exploitable (no auth, no user interaction, single WebSocket connect) confidentiality breach. Likelihood of opportunistic exploitation is currently moderate-low per EPSS (0.31%, 76th percentile) and absence from CISA KEV, but the barrier to exploitation is near zero once an attacker knows a target runs SiYuan in publish mode with anonymous access — no tooling or AI/ML expertise required, just a persistent socket. The real exposure driver is deployment posture: any self-hosted publish instance exposed to the internet with `Publish.Auth.Enable=false` (a documented, supported configuration) is exploitable by design flaw, not misconfiguration alone, since the WebSocket route bypasses publish-access filters entirely regardless of settings intent.

How does the attack unfold?

Initial Access
Attacker opens an anonymous WebSocket connection to the SiYuan publish endpoint (`/ws` on port 6808), which is admitted as a `RoleReader` publish token satisfying only `CheckAuth`.
Session Admission
The anonymous session is registered via `AddPushChan` into the same broadcast pool used for authenticated clients, with no isolation by role or publish-access scope.
Passive Collection
As legitimate users edit documents, the kernel's unfiltered broadcast functions push content events (block DOM, saves, renames, creates) to every session in the pool, including the attacker's, mining the live information repository.
AML.T0036
Impact
The attacker reconstructs sensitive content — password-protected document text, titles, and workspace structure — entirely from the push stream, defeating publish-access and password boundaries without any HTTP-layer trace.

What systems are affected?

PackageEcosystemVulnerable RangePatched
Jupyter Notebookgo< 0.0.0-20260723013612-ba948639d7f60.0.0-20260723013612-ba948639d7f6
13.5KOpenSSF 5.83.0K dependentsPushed 2d ago79% patched~75d to patchFull package profile →

Do you use Jupyter Notebook? You're affected.

How severe is it?

CVSS 3.1
8.6 / 10
EPSS
0.5%
chance of exploitation in 30 days
Higher than 45% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Trivial
Exploitation Confidence
medium
○CISA SSVC: Public PoC
○Public PoC indexed (trickest/cve)
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What is the attack surface?

AVACPRUISCIA
AVNetwork
ACLow
PRNone
UINone
SChanged
CHigh
INone
ANone

What should I do?

1 step
  1. 1) Upgrade SiYuan kernel to the version incorporating commit ba948639d7f6 (fix for GHSA-mw8r-mw84-88v2) immediately. 2) Until patched, do not run publish mode with Publish.Auth.Enable=false; require Basic Auth or a strong publish password on any publish-enabled instance. 3) Restrict network access to port 6808 (and the /ws route) to trusted IPs or a VPN/reverse-proxy allowlist — do not expose it directly to the internet. 4) Audit existing deployments for long-lived anonymous WebSocket connections in reverse-proxy/access logs, since the leak leaves no HTTP-layer trace. 5) Treat any content edited while a publish instance was internet-facing and unpatched as potentially disclosed, including password-protected and encrypted-notebook documents edited while unlocked. 6) Rotate any credentials or secrets that may have been pasted into SiYuan documents during the exposure window.

What does CISA's SSVC say?

DecisionTrack*
Exploitationpoc
AutomatableYes
Technical Impactpartial

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

How is it classified?

Auth BypassData LeakagePrivacy ViolationPluginAML.T0036

Which compliance frameworks are affected?

This CVE is relevant to:

ISO 42001
A.7.2 / A.7.3-Data for AI systems — access control and protection
NIST AI RMF
GOVERN 1.5 / MANAGE 4.1-Access control and monitoring for AI system data assets
OWASP LLM Top 10
LLM06:2025-Sensitive Information Disclosure

Frequently Asked Questions

What is CVE-2026-72810?

SiYuan's publish-mode WebSocket channel (port 6808) admits anonymous "reader" sessions into the same broadcast pool as authenticated clients, so any anonymous socket held open receives a real-time, unfiltered stream of every document edit — titles, block content, notebook names, and structure — including for password-protected and unpublished notes, because the kernel's broadcast functions never apply the publish-access checks that gate the equivalent HTTP endpoints. With 2,997 downstream dependents and a CVSS of 8.6 (confidentiality-only, no privileges or user interaction required), this is a trivial-to-exploit disclosure for any SiYuan instance running publish mode with auth disabled or permissively configured; EPSS sits at just 0.31% (76th percentile) and it's not in CISA KEV or paired with a public exploit or Nuclei template, so mass exploitation isn't underway, but the PoC is a one-line WebSocket connect held open during ordinary admin activity. Patch to the fixed kernel build (commit ba948639d7f6, per GHSA-mw8r-mw84-88v2) immediately on any internet-facing publish instance; until patched, keep `Publish.Auth.Enable=true` or restrict port 6808 at the network layer, and monitor for anomalous long-lived `/ws` connections from unauthenticated clients.

Is CVE-2026-72810 actively exploited?

Proof-of-concept exploit code is publicly available for CVE-2026-72810, increasing the risk of exploitation.

How to fix CVE-2026-72810?

1) Upgrade SiYuan kernel to the version incorporating commit ba948639d7f6 (fix for GHSA-mw8r-mw84-88v2) immediately. 2) Until patched, do not run publish mode with `Publish.Auth.Enable=false`; require Basic Auth or a strong publish password on any publish-enabled instance. 3) Restrict network access to port 6808 (and the `/ws` route) to trusted IPs or a VPN/reverse-proxy allowlist — do not expose it directly to the internet. 4) Audit existing deployments for long-lived anonymous WebSocket connections in reverse-proxy/access logs, since the leak leaves no HTTP-layer trace. 5) Treat any content edited while a publish instance was internet-facing and unpatched as potentially disclosed, including password-protected and encrypted-notebook documents edited while unlocked. 6) Rotate any credentials or secrets that may have been pasted into SiYuan documents during the exposure window.

What systems are affected by CVE-2026-72810?

This vulnerability affects the following AI/ML architecture patterns: Self-hosted knowledge-base / PKM platforms, AI agent workspaces backed by note/document repositories, RAG pipelines sourcing content from SiYuan document stores.

What is the CVSS score for CVE-2026-72810?

CVE-2026-72810 has a CVSS v3.1 base score of 8.6 (HIGH). The EPSS exploitation probability is 0.54%.

What is the AI security impact?

Affected AI Architectures

Self-hosted knowledge-base / PKM platformsAI agent workspaces backed by note/document repositoriesRAG pipelines sourcing content from SiYuan document stores

MITRE ATLAS Techniques

AML.T0036Data from Information Repositories

Compliance Controls Affected

ISO 42001: A.7.2 / A.7.3
NIST AI RMF: GOVERN 1.5 / MANAGE 4.1
OWASP LLM Top 10: LLM06:2025

What are the technical details?

Original Advisory

**CVE:** This vulnerability corresponds to [CVE-2026-72810](https://nvd.nist.gov/vuln/detail/CVE-2026-72810). ### Summary WebSocket sessions established through the publish surface (port 6808, `RoleReader` anonymous when `Publish.Auth.Enable` is `false`) are added to the same broadcast session pool as authenticated sessions. The kernel's broadcast functions push content events transactions carrying block DOM, document save/create, move/rename to every session in the pool with no role or publish-access filtering. As a result, an anonymous reader who holds a WebSocket connection open passively receives a real-time feed of every edit made in the workspace, including edits to password-protected, publish-forbidden, and unpublished documents. Because these events are delivered over the push channel and never pass through an HTTP handler, none of the publish-access filters that gate the HTTP endpoints apply. ### Details **Session admission.** `HandleConnect` admits the injected `RoleReader` publish token, and the session is registered via `AddPushChan` into the same `sessions` pool used for authenticated clients. **Unfiltered broadcast.** The broadcast functions (`Broadcast`, `broadcastOthers`, `broadcastOtherAppMains`, …) write to every session in the pool with no role or publish-access check. The `isPublish` flag on a session is consulted only to send the "service closed" notice it is never used to gate content. Content events are pushed via `PushModeBroadcast → Broadcast()`, so transactions (with rendered block DOM), `savedoc`/create, and `moveDoc`/rename events reach the publish reader's socket unfiltered. **No HTTP filter applies.** This is a push channel, the events originate from the kernel's own edit pipeline and are broadcast directly to open sockets. They never traverse an HTTP handler, so the publish-access filters that gate the HTTP content endpoints (and the incomplete/missing filters reported separately on those endpoints) are not in the path at all. The WebSocket route (`/ws`) is `CheckAuth`-only, which the publish `RoleReader` token satisfies. ### Proof of Concept Reproduced on a local instance (SiYuan running locally, publish mode enabled on port 6808, publish Basic Auth disabled). An anonymous client (no token, no password) opens `wss://127.0.0.1:6808/ws` and holds it open while an administrator edits documents in the workspace. The anonymous socket received, in real time and unfiltered: - `updateAttrs` with `name=WS_LEAK_SECRET_9931` on a block whose `rootID` is a **password-protected** document. - The secret title `WS_SECRET_DOC_7742` of a newly created document. - The create event carrying the notebook (box) name `CritChain` and the document path. No HTTP request was made beyond the WebSocket upgrade; the content arrived over the push channel. ### Impact An anonymous reader (publish mode with auth disabled) or any publish `RoleReader` who merely holds a WebSocket connection open receives a live feed of every edit an administrator makes: block DOM, attributes, titles, notebook names, and document structure, including for password-protected, publish-forbidden, and unpublished documents. This defeats the publish-access and publish-password boundaries entirely for any content edited while the socket is open. The precondition is trivial: an administrator active in the workspace while the anonymous socket is connected. Confidentiality-only (passive disclosure); the channel is receive-only for the reader. Encrypted-notebook content follows the same broadcast path if edited while unlocked. ### Suggested fix Filter broadcasts by session before writing: for any session flagged `isPublish`, apply the same publish-access/publish-ignore/publish-password checks used on the HTTP content path before pushing a content event, or exclude publish sessions from content broadcasts entirely and deliver only the events a publish viewer is authorized to see. The `isPublish` flag is already present on the session; it should gate content, not only the service-closed notice.

Exploitation Scenario

An attacker discovers a SiYuan publish instance exposed on port 6808 with `Publish.Auth.Enable=false` (default-permissive or a common misconfiguration for "quick sharing"). They open a WebSocket connection to `wss://target:6808/ws` with no credentials — `HandleConnect` admits them as an anonymous `RoleReader` and registers the session into the shared broadcast pool. The attacker holds the connection open indefinitely and passively logs every pushed event. As an administrator works in the workspace over the following hours or days — editing password-protected compliance documents, creating a new document with sensitive credentials in the title, renaming notebooks — the attacker's socket silently receives the full block DOM, titles, and document-structure events for all of it, with zero indication in HTTP logs that anything was accessed. The attacker reconstructs sensitive content entirely from the push stream without ever making an authorized HTTP request.

Weaknesses (CWE)

CWE-862 — Missing Authorization: The product does not perform an authorization check when an actor attempts to access a resource or perform an action.

  • [Architecture and Design] Divide the product into anonymous, normal, privileged, and administrative areas. Reduce the attack surface by carefully mapping roles with data and functionality. Use role-based access control (RBAC) [REF-229] to enforce the roles at the appropriate boundaries. Note that this approach may not protect against horizontal authorization, i.e., it will not protect a user from attacking others with the same role.
  • [Architecture and Design] Ensure that access control checks are performed related to the business logic. These checks may be different than the access control checks that are applied to more generic resources such as files, connections, processes, memory, and database records. For example, a database may restrict access for medical records to a specific database user, but each record might only be intended to be accessible to the patient and the patient's doctor [REF-7].

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N

Timeline

Published
September 3, 2026
Last Modified
September 3, 2026
First Seen
September 4, 2026

Related Vulnerabilities