CVE-2026-45375SiYuan是一款开源的个人知识管理系统。在3.7.0版本之前,其社区市场功能存在严重的存储型XSS漏洞。该漏洞源于后端在处理插件、主题等包的配置文件时,仅对作者、显示名称和描述字段进行了HTML转义,而忽略了“名称”和“版本”字段。前端在渲染这些未经过滤的数据时使用了innerHTML,导致攻击者可以通过上传恶意构造的包,在用户浏览市场页面时执行任意恶意HTML/JavaScript代码,从而窃取用户凭证或执行其他恶意操作。
该漏洞的根源在于SiYuan内核与前端渲染之间的数据清洗不一致。在`kernel/bazaar/package.go`文件中,`sanitizePackageDisplayStrings`函数负责清理输入,但仅覆盖了Author、DisplayName和Description字段。Package的Name和Version字段被原样传递。在前端`app/src/config/bazaar.ts`中,代码直接通过模板字符串(如`${item.preferredName}`)将这些未转义的字符串嵌入HTML,并赋值给DOM元素的`innerHTML`属性。利用路径:攻击者注册一个恶意插件,将其`plugin.json`中的`name`字段设置为包含JavaScript Payload的字符串。当其他用户打开SiYuan的“设置 -> 市场”页面时,前端会从服务器获取插件列表并渲染。由于使用了`innerHTML`,恶意脚本被解析并立即在受害者的浏览器上下文中执行。