SiYuan has an Arbitrary File Read in its Desktop Publish Service
Description
SiYuan is a personal knowledge management system. In versions 3.6.0 and below, the /api/lute/html2BlockDOM on the desktop copies local files pointed to by file:// links in pasted HTML into the workspace assets directory without validating paths against a sensitive-path list. Together with GET /assets/*path, which only requires authentication, a publish-service visitor can cause the desktop kernel to copy any readable sensitive file and then read it via GET, leading to exfiltration of sensitive files. This issue has been fixed in version 3.6.1.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/siyuan-note/siyuan/kernelGo | <= 0.0.0-20260313024916-fd6526133bb3 | — |
Affected products
1- Range: < 3.6.1
Patches
1294b8b429dea:lock: https://github.com/siyuan-note/siyuan/security/advisories/GHSA-fq2j-j8hc-8vw8
3 files changed · +6 −2
kernel/api/lute.go+5 −0 modified@@ -176,6 +176,11 @@ func html2BlockDOM(c *gin.Context) { return ast.WalkContinue } + if util.IsSensitivePath(localPath) { + logging.LogWarnf("skip copying asset [%s] due to sensitive path", localPath) + return ast.WalkContinue + } + name := filepath.Base(localPath) ext := filepath.Ext(name) name = name[0 : len(name)-len(ext)]
kernel/api/router.go+1 −1 modified@@ -171,7 +171,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/tag/removeTag", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, removeTag) ginServer.Handle("POST", "/api/lute/spinBlockDOM", model.CheckAuth, spinBlockDOM) // 未测试 - ginServer.Handle("POST", "/api/lute/html2BlockDOM", model.CheckAuth, html2BlockDOM) + ginServer.Handle("POST", "/api/lute/html2BlockDOM", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, html2BlockDOM) ginServer.Handle("POST", "/api/lute/copyStdMarkdown", model.CheckAuth, copyStdMarkdown) ginServer.Handle("POST", "/api/query/sql", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, SQL)
kernel/util/path.go+0 −1 modified@@ -361,7 +361,6 @@ func IsSensitivePath(p string) bool { "/.", "/etc", "/root", - "/etc", "/var", "/proc", "/sys",
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-fq2j-j8hc-8vw8ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2026-32938ghsaADVISORY
- github.com/siyuan-note/siyuan/commit/294b8b429dea152cd1df522cddf406054c1619adghsax_refsource_MISCWEB
- github.com/siyuan-note/siyuan/releases/tag/v3.6.1ghsax_refsource_MISCWEB
- github.com/siyuan-note/siyuan/security/advisories/GHSA-fq2j-j8hc-8vw8ghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.