Every CVE Search/ Get API key

CVE-2026-72788

SiYuan before v3.7.4 Information Disclosure via UILayout Filter

6.9 MediumFix available

SiYuan versions before v3.7.4 contain an information disclosure vulnerability in the UILayout filter that fails to properly restrict administrator workspace state from publish readers. Unauthenticated attackers can retrieve the administrator's open documents, search terms, notebook paths, and private asset locations by calling the getConf endpoint without authentication.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
None

Exploit likelihood

0.38%Up 0.1 points since Aug 13, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.9

SiYuan before v3.7.4 Information Disclosure via UILayout Filter

SiYuan versions before v3.7.4 contain an information disclosure vulnerability in the UILayout filter that fails to properly restrict administrator workspace state from publish readers. Unauthenticated attackers can retrieve the administrator's open documents, search terms, notebook paths, and private asset locations by calling the getConf endpoint without authentication.

Record
CVE-2026-72788
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N
CVSS 3.1
5.8 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
Weakness
CWE-863
Updated
2026-11-02
EUVDEUVD-2026-57448 6.9

SiYuan versions before v3.7.4 contain an information disclosure vulnerability in the UILayout filter that fails to properly restrict administrator workspace state from publish readers. Unauthenticated attackers can retrieve the administrator's open documents, search terms, notebook paths, and private asset locations by calling the getConf endpoint without authentication.

Record
EUVD-2026-57448
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-hgfg-j9pg-43xw 5.8

SiYuan discloses an administrator's open documents and search terms to anonymous readers

Summary

/api/system/getConf serves Conf.UILayout to publish readers after passing it through FilterConfByPublishIgnore, whose only function is to filter that layout. The layout is written exclusively by setUILayout, which is administrator-gated, so what readers receive is the administrator's own live workspace state, re-saved on every tab open, close and focus change.

The filter that is supposed to protect it, filterLayoutItemByPublishIgnore, has four separate defects. Together they mean a single unauthenticated POST with no arguments returns the titles and identifiers of the administrator's open password-protected documents, the titles of documents in locked or closed notebooks, their recent search terms and the paths those searches were scoped to, and the paths of private assets they have open.

This report concerns FilterConfByPublishIgnore and its layout walker. It is distinct from the previously reported getConf issues, which concern configuration fields surviving HideConfSecret's blocklist. Restructuring the secret-masking path would not affect this, because UILayout is not a secret to be stripped. It is a field intended to be served and filtered.

Details

Route and writer asymmetry. kernel/api/router.go:70 registers POST /api/system/getConf with model.CheckAuth only, so it is reachable by the publish RoleReader token and anonymously when Publish.Auth.Enable is false. The corresponding writer, setUILayout at kernel/api/router.go:67, carries CheckAuth, CheckAdminRole and CheckReadonly. Only an administrator can write this state, and any reader can read it.

The filter exists and is intended to work. HideConfSecret never touches UILayout (zero matches on both refs). Instead the reader branch runs:

if model.IsReadOnlyRoleContext(c) {
    publishIgnore := model.GetInvisiblePublishAccess(publishAccess)
    maskedConf = model.FilterConfByPublishIgnore(publishIgnore, maskedConf)
}

FilterConfByPublishIgnore does exactly one thing, which is filter UILayout. The intent that readers must not see the administrator's private tabs is therefore already established in the code. The four defects below are failures of that filter, not an argument that it should exist.

filterLayoutItemByPublishIgnore is byte-identical at eef105683 and v3.7.4-alpha.1 and has not changed since 3facc37df (#16041).


Defect 1: the password tier is not checked. GetPathPasswordByPublishAccess and CheckPublishAuthCookie appear zero times in the walker. Of the five access levels defined in publishAccess.ts, only the protected level is {visible: true, password: ...}. A password-protected document therefore never matches the invisible list, and there is no password check to catch it afterwards. Its tab survives intact, carrying title (the document title), docIcon, notebookId, rootId and blockId.

To be precise about scope: the forbidden level sets visible: false, so forbidden documents are correctly filtered. The leak is specific to the password tier.

This is the same class of defect as the recently fixed tag-label filter, on a different function that the tag fix does not touch.

Defect 2: fail-open on an unresolvable document. The walker does:

bt := treenode.GetBlockTree(rootId)
if bt == nil {
    return
}

and the tab is retained. Compare CheckBlockIdAccessableByPublishAccess, which fails closed on the same condition. A rootId is unresolvable when its notebook is a locked encrypted notebook or a closed notebook, which are precisely the notebooks a reader must not learn about. Their tab titles pass through.

This survives the recent change that appends encrypted boxes to the invisible and disable ignore lists, because that change only takes effect once bt resolves. The nil branch returns before any ignore list is consulted.

Defect 3: non-editor tabs are never inspected. The walker examines one key, children["rootId"].…

Record
GHSA-hgfg-j9pg-43xw
CVSS 3.1
5.8 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
Weakness
CWE-863
Updated
2026-11-02
GitHub AdvisoriesGHSA-hpmw-8pgp-x77j 6.9

Duplicate Advisory: SiYuan discloses an administrator's open documents and search terms to anonymous readers

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-hgfg-j9pg-43xw. This link is maintained to preserve external references.

Original Description

SiYuan versions before v3.7.4 contain an information disclosure vulnerability in the UILayout filter that fails to properly restrict administrator workspace state from publish readers. Unauthenticated attackers can retrieve the administrator's open documents, search terms, notebook paths, and private asset locations by calling the getConf endpoint without authentication.

Record
GHSA-hpmw-8pgp-x77j
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
5.8 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
Weakness
CWE-863
Updated
2026-11-02
NVD 6.9

SiYuan versions before v3.7.4 contain an information disclosure vulnerability in the UILayout filter that fails to properly restrict administrator workspace state from publish readers. Unauthenticated attackers can retrieve the administrator's open documents, search terms, notebook paths, and private asset locations by calling the getConf endpoint without authentication.

Record
CVE-2026-72788
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
5.8 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
Weakness
CWE-863
Updated
2026-11-02
OSVGHSA-hgfg-j9pg-43xw 5.8

SiYuan discloses an administrator's open documents and search terms to anonymous readers

Summary

/api/system/getConf serves Conf.UILayout to publish readers after passing it through FilterConfByPublishIgnore, whose only function is to filter that layout. The layout is written exclusively by setUILayout, which is administrator-gated, so what readers receive is the administrator's own live workspace state, re-saved on every tab open, close and focus change.

The filter that is supposed to protect it, filterLayoutItemByPublishIgnore, has four separate defects. Together they mean a single unauthenticated POST with no arguments returns the titles and identifiers of the administrator's open password-protected documents, the titles of documents in locked or closed notebooks, their recent search terms and the paths those searches were scoped to, and the paths of private assets they have open.

This report concerns FilterConfByPublishIgnore and its layout walker. It is distinct from the previously reported getConf issues, which concern configuration fields surviving HideConfSecret's blocklist. Restructuring the secret-masking path would not affect this, because UILayout is not a secret to be stripped. It is a field intended to be served and filtered.

Details

Route and writer asymmetry. kernel/api/router.go:70 registers POST /api/system/getConf with model.CheckAuth only, so it is reachable by the publish RoleReader token and anonymously when Publish.Auth.Enable is false. The corresponding writer, setUILayout at kernel/api/router.go:67, carries CheckAuth, CheckAdminRole and CheckReadonly. Only an administrator can write this state, and any reader can read it.

The filter exists and is intended to work. HideConfSecret never touches UILayout (zero matches on both refs). Instead the reader branch runs:

if model.IsReadOnlyRoleContext(c) {
    publishIgnore := model.GetInvisiblePublishAccess(publishAccess)
    maskedConf = model.FilterConfByPublishIgnore(publishIgnore, maskedConf)
}

FilterConfByPublishIgnore does exactly one thing, which is filter UILayout. The intent that readers must not see the administrator's private tabs is therefore already established in the code. The four defects below are failures of that filter, not an argument that it should exist.

filterLayoutItemByPublishIgnore is byte-identical at eef105683 and v3.7.4-alpha.1 and has not changed since 3facc37df (#16041).


Defect 1: the password tier is not checked. GetPathPasswordByPublishAccess and CheckPublishAuthCookie appear zero times in the walker. Of the five access levels defined in publishAccess.ts, only the protected level is {visible: true, password: ...}. A password-protected document therefore never matches the invisible list, and there is no password check to catch it afterwards. Its tab survives intact, carrying title (the document title), docIcon, notebookId, rootId and blockId.

To be precise about scope: the forbidden level sets visible: false, so forbidden documents are correctly filtered. The leak is specific to the password tier.

This is the same class of defect as the recently fixed tag-label filter, on a different function that the tag fix does not touch.

Defect 2: fail-open on an unresolvable document. The walker does:

bt := treenode.GetBlockTree(rootId)
if bt == nil {
    return
}

and the tab is retained. Compare CheckBlockIdAccessableByPublishAccess, which fails closed on the same condition. A rootId is unresolvable when its notebook is a locked encrypted notebook or a closed notebook, which are precisely the notebooks a reader must not learn about. Their tab titles pass through.

This survives the recent change that appends encrypted boxes to the invisible and disable ignore lists, because that change only takes effect once bt resolves. The nil branch returns before any ignore list is consulted.

Defect 3: non-editor tabs are never inspected. The walker examines one key, children["rootId"].…

Record
GHSA-hgfg-j9pg-43xw
CVSS 3.1
5.8 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
Weakness
CWE-863
Updated
2026-11-02
OSVGHSA-hpmw-8pgp-x77j 6.9

Duplicate Advisory: SiYuan discloses an administrator's open documents and search terms to anonymous readers

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-hgfg-j9pg-43xw. This link is maintained to preserve external references.

Original Description

SiYuan versions before v3.7.4 contain an information disclosure vulnerability in the UILayout filter that fails to properly restrict administrator workspace state from publish readers. Unauthenticated attackers can retrieve the administrator's open documents, search terms, notebook paths, and private asset locations by calling the getConf endpoint without authentication.

Record
GHSA-hpmw-8pgp-x77j
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
5.8 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
Weakness
CWE-863
Updated
2026-11-02
OSVGO-2026-6622 No score

SiYuan discloses an administrator's open documents and search terms to anonymous readers in github.com/siyuan-note/siyuan/kernel

SiYuan discloses an administrator's open documents and search terms to anonymous readers in github.com/siyuan-note/siyuan/kernel

Record
GO-2026-6622
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
github.com/siyuan-note/siyuan/kernel
Go
before 0.0.0-20260812083335-251596fc0de2
0.0.0-20260812083335-251596fc0de2

History

History
RecordedChangedSources
affected
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-72788 is a medium vulnerability (CVSS 6.9) in Siyuan-note Siyuan, published August 12, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.38%, the 31st percentile. Fixed in github.com/siyuan-note/siyuan/kernel 0.0.0-20260812083335-251596fc0de2.

References

This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open