Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
🐹
🐹 Go
Not in CISA KEV
MEDIUM severity

CVE-2026-72792 — kernel

MEDIUMFix: siyuan-note/siyuan@4515fa2

CVE-2026-72792 is a medium-severity (CVSS 5.8) CWE-863 vulnerability in github.com/siyuan-note/siyuan/kernel. A fix is available for github.com/siyuan-note/siyuan/kernel — see the affected versions and patch details below.

SiYuan: Tag labels from password-protected documents are returned to readers who have not entered the password

Also known asGO-2026-6427
Published
Updated
Affected
1 pkg
Patched
1 / 1
Exploits
None indexed
Exploitation data as of Oct 17, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

No confirmed exploitation observed yet

  • CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
  • CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.

Exploitation and automatability from CISA’s SSVC triage for CVE-2026-72792.

EPSS Exploitation Probability

via FIRST.org ↗
0.3%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs24th percentile — riskier than 24% of all scored CVEsHighest risk
0.00%0.28%0.55%0.83%0.2%0.3%0.3%Sep 26Oct 26Oct 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

How urgent is this, really

CVE-2026-72792 by exploitation likelihood (EPSS) against impact (CVSS). Outside the shaded patch-first corner.

Where this sits among everything scored

Of 391,411 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Counts from FIRST.org, log-scaled.

Real-World Exposure

1 pkg affected
🐹github.com/siyuan-note/siyuan/kernel

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.

Description

CVE: This vulnerability corresponds to CVE-2026-72792.

Summary

/api/tag/getTag filters its results for reader roles through FilterTagsByPublishIgnore, which checks only the visible publish tier. Documents that are published but password-protected pass that check, so a reader who has never entered a document's publish password receives every tag label used inside it, together with occurrence counts.

The project has already treated this exact tier mismatch as a vulnerability on a sibling path: commit 82e9ded42 ("Enforce publish access for graph nodes") moved the graph endpoint off the visible-only filter and onto a password-aware one. FilterTagsByPublishIgnore was not upgraded alongside it.

Details

ItemDetail
Routekernel/api/router.go:194 POST /api/tag/getTag → model.CheckAuth → getTag
MiddlewareCheckAuth only: no CheckReadonly, no CheckAdminRole
GuardPresent but at the wrong tier: visible-only, no password check
ExposedEvery tag label (#label# text) and its occurrence count inside password-protected but visible documents

The tier mismatch. For reader roles, getTag filters via:

publishIgnore := GetInvisiblePublishAccess(publishAccess)
tags = FilterTagsByPublishIgnore(publishIgnore, tags)

FilterTagsByPublishIgnore counts a label if CheckPathAccessableByPublishIgnore(span.Box, span.Path, publishIgnore) holds, then reads label := util.UnescapeHTML(span.Content).

CheckPathAccessableByPublishIgnore (kernel/model/publish_access.go:183) consults the invisible set only. It returns true for any visible document, including one carrying a publish password. The project's complete gate is checkBlockTreeAccessableByPublishAccess (kernel/model/publish_access.go:225), which ANDs that same visibility test with password == "" || CheckPublishAuthCookie(...). The tag filter implements the first half and omits the second.

The disclosed value is user-authored content, not a structural identifier: span.Content is the tag text an author wrote inside the document project codenames, personal names, client names, subject matter and the accompanying count reveals how heavily each appears.

Established as a defect by the project's own remediation. Commit 82e9ded42 replaced the graph endpoint's visible-only FilterGraphByPublishIgnore with a filter that additionally resolves the document's publish password and validates CheckPublishAuthCookie. The reasoning that motivated that change applies unchanged here: same input shape, same visible-only body, same class of leaked material. FilterTagsByPublishIgnore retains the pre-fix pattern.

Verified unfixed. At v3.7.4-alpha.1, getTag still calls FilterTagsByPublishIgnore, and that function's body still tests only CheckPathAccessableByPublishIgnore. No commit on the development branch touches kernel/api/tag.go or the tag filter (git log and git log -S both empty over that range).

Scope note on the remaining visible-only call sites. Two further consumers of the *ByPublishIgnore tier were reviewed and are not claimed as vulnerabilities in this report: listDocsByPath (kernel/model/filetree.go:1160), which exposes document titles and is plausibly intentional for navigation, and the identifier-only filter, which returns no authored content. They are noted because the visible-only tier is now a repeated source of defects, and an audit of every *ByPublishIgnore call site is the durable remedy rather than a third individual patch.

Proof of Concept

Precondition: publish mode enabled (default port 6808); a published document that carries a publish password and contains at least one tag; a reader session that has not authenticated to that document.

POST http://127.0.0.1:6808/api/tag/getTag
{}

→ 200
   The returned tag tree includes labels sourced from the password-protected
   document, with counts, despite the session holding no publish auth cookie
   for it.

Differential check: request the document itself through a password-gated endpoint with the same session and observe that access is refused, while its tag labels remain present in the getTag response.

Impact

An anonymous reader in publish mode or any publish RoleReader enumerates the tag vocabulary of documents they are not authorized to open, along with usage counts. Tags are author-written free text, so this discloses subject matter, names and internal terminology from documents whose contents the publish password was configured to protect. Confidentiality-only.

Suggested fix

Replace FilterTagsByPublishIgnore with a password-aware filter mirroring the one introduced in 82e9ded42 for graph nodes: resolve each span's document password via GetPathPasswordByPublishAccess and require CheckPublishAuthCookie before the label is counted, in addition to the existing visibility test. More durably, audit every remaining *ByPublishIgnore call site against checkBlockTreeAccessableByPublishAccess the visible-only tier has now produced this defect on at least two separate endpoints.

Affected Packages

1 total 1 fixed
EcosystemPackageVulnerable rangeFix
🐹Gogithub.com/siyuan-note/siyuan/kernelall versions0.0.0-20260726002639-4515fa257cfago get github.com/siyuan-note/siyuan/kernel@v0.0.0-20260726002639-4515fa257cfa

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/siyuan-note/siyuan/kernel, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update github.com/siyuan-note/siyuan/kernel to 0.0.0-20260726002639-4515fa257cfa or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-72792 is resolved across your whole dependency graph.

  3. Workarounds

    Put an independent control in front of the weakness: restrict the affected endpoint or interface to trusted networks, require an additional authentication factor or proxy-level check, and invalidate existing sessions and credentials in case the flaw has already been used.

Frequently Asked Questions

**CVE:** This vulnerability corresponds to [CVE-2026-72792](https://nvd.nist.gov/vuln/detail/CVE-2026-72792). ### Summary `/api/tag/getTag` filters its results for reader roles through `FilterTagsByPublishIgnore`, which checks only the *visible* publish tier. Documents that are published but password-protected pass that check, so a reader who has never entered a document's publish password receives every tag label used inside it, together with occurrence counts. The project has already treated this exact tier mismatch as a vulnerability on a sibling path: commit `82e9ded42` ("Enforce publis
O3 Security · Impact-Aware SCA

Is CVE-2026-72792 in your dependencies?

Find it across Go, including transitive dependencies.

CVE-2026-72792: kernel — Fix Available