漏洞概述 标题: Stored XSS to RCE via CSS-snippet breakout in renderSnippet() 描述: 一个包含 的 CSS 片段在 插值时,会跳出其周围的 标签。 攻击者可以通过构造特定的 CSS 片段(如 )在渲染器中执行任意 JavaScript。 在 Electron 桌面构建中,如果启用了 ,攻击者可以通过 XSS 链实现远程代码执行(RCE)。 该漏洞还绕过了用户的 / 分离设置,即使用户关闭了 ,CSS 路径仍然可以运行。 影响范围 受影响版本: <= 3.6.5 修复版本: v3.7.0 严重程度: Critical (9.9 / 10) CVSS v3 基础指标: - 攻击向量: Network - 攻击复杂度: Low - 所需权限: Low - 用户交互: None - 范围: Changed - 机密性: High - 完整性: High - 可用性: High 修复方案 1. 最干净的修复方法: - 构建元素时使用 并设置 。 2. 较小的补丁: - 如果需要保留当前行为,可以在插值前转义 字符。 3. 其他修复: - 在 后端处理程序上拒绝 ,以防止旧渲染器拉取同步的工作区中的恶意片段。 POC 代码 启动 SiYuan: 植入片段: 结果: 打开浏览器或 Electron 应用: 结果: RCE 利用: 说明: 在渲染器中可达,因为 在 中设置。 影响 存储的 XSS 到 RCE 在 Electron 桌面构建中,加上在移动和 Docker Web 构建中的 XSS。 每当渲染器刷新片段时(启动时、手动重新加载时,或通过 WebSocket 推送),都会触发漏洞。 任何受工作区写入权限影响的用户都可能被暴露。 该漏洞还绕过了用户的片段切换选项,即使用户关闭了 ,CSS 路径仍然可以运行。