VYPR
Critical severityNVD Advisory· Published Mar 20, 2026· Updated Mar 20, 2026

SiYuan has an Arbitrary File Read in its Desktop Publish Service

CVE-2026-32938

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.

PackageAffected versionsPatched versions
github.com/siyuan-note/siyuan/kernelGo
<= 0.0.0-20260313024916-fd6526133bb3

Affected products

1

Patches

1
294b8b429dea

:lock: https://github.com/siyuan-note/siyuan/security/advisories/GHSA-fq2j-j8hc-8vw8

https://github.com/siyuan-note/siyuanDanielMar 16, 2026via ghsa
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

News mentions

0

No linked articles in our index yet.