CVE-2026-32940SiYuan是一款个人知识管理系统。在3.6.0及以下版本中,由于SanitizeSVG组件的过滤列表不完整,未正确拦截data:text/xml和data:application/xml,导致攻击者可以在SVG中嵌入JavaScript。未授权的/api/icon/getDynamicIcon接口直接将用户输入的内容拼接到SVG标记中,且未进行转义。当受害者访问恶意链接并点击注入的链接时,将触发跨站脚本攻击。该漏洞已被修复,建议受影响用户尽快升级。
该漏洞的核心在于SiYuan的SVG处理机制存在缺陷。首先,SanitizeSVG函数的黑名单机制不完善,仅屏蔽了data:text/html和data:image/svg+xml,却忽略了data:text/xml和data:application/xml,这两种MIME类型同样可以渲染包含JavaScript的SVG。其次,/api/icon/getDynamicIcon接口接受用户控制的content参数,并使用fmt.Sprintf直接将其插入到SVG代码中,中间没有任何转义处理。攻击者可以构造特定的Payload,利用上述MIME类型绕过过滤。由于响应头为Content-Type: image/svg+xml,浏览器会将其视为图像渲染。虽然前端img标签不支持交互链接,但如果通过直接访问URL或object/embed标签嵌入,用户点击SVG内的元素即可执行恶意JavaScript代码,从而窃取Cookie或执行敏感操作。