漏洞总结:SiYuan 未过滤 Bazaar README 渲染导致 XSS 到 RCE 漏洞概述 SiYuan Bazaar(社区市场)在渲染包 README 内容时未进行 HTML 过滤。后端使用 创建渲染器但未调用 ,导致 Markdown 中的原始 HTML 被透传。前端获取后端返回的未过滤 HTML 后,直接通过 赋值给 DOM 元素。由于 Electron 配置中 且 ,注入的恶意 JavaScript 可直接调用 Node.js API,实现任意代码执行(RCE)。 影响范围 受影响版本:SiYuan <= 3.5.9 严重程度:Critical (CVSS 9.6) 攻击向量:网络 攻击复杂度:低 用户交互:低(用户只需点击查看包详情) 影响: - 任何查看恶意包 README 的 SiYuan 桌面用户均可被远程代码执行。 - 攻击者可窃取 API Token、配置文件、SSH 密钥、浏览器凭据及任意文件。 - 可在 Windows、macOS 和 Linux 上安装持久化后门。 - 支持多种 HTML 元素(img, svg, details, picture 等)作为触发载体。 修复方案 1. 后端修复:在 的 函数中,创建 Lute 引擎后调用 。 2. 前端修复:在 中,使用 对从后端获取的 HTML 进行清理后再赋值给 。 3. 长期加固:在 中,将 Electron 的 设为 , 设为 ,并开启 。 利用代码 (POC) 1. 基础利用 (One-click RCE) 2. 多阶段载荷 (Multi-stage payload via README) 3. SVG 载荷 (绕过 naive img 过滤) 4. Details 元素载荷 (交互式触发)