思源笔记 (SiYuan) Mermaid 渲染漏洞总结 漏洞概述 CVE ID: CVE-2024-40107 漏洞名称: Zero-Click NTLM Hash Theft and Blind SSRF via Mermaid Diagram Rendering (通过 Mermaid 图表渲染实现零点击 NTLM 哈希窃取和盲 SSRF) 描述: 思源笔记 (SiYuan) 在配置 Mermaid.js 时使用了 和 。在此模式下,带有 属性的 标签会绕过 Mermaid 的 DOMPurify 检查并进入 SVG 块。SVG 随后通过 注入到 DOM 中,且没有进行二次清理。 当受害者在 Windows 系统上打开包含恶意 Mermaid 图表的笔记时,Electron 客户端会获取该 URL。在 Windows 上,协议相对 URL(例如 )会被解析为 UNC 路径(例如 )。Windows 会自动尝试进行 SMB 身份验证,从而将受害者的 NTLMv2 哈希发送给攻击者。 此外,该漏洞还允许攻击者进行盲 SSRF(服务器端请求伪造)和跟踪。 影响范围 受影响版本: < 3.6.4 已修复版本: v3.6.4 修复方案 1. 将 Mermaid 初始化配置中的 更改为 。 2. 如果必须使用 HTML 标签,建议在 第 101 行的 赋值之前,对 SVG 输出应用 DOMPurify 处理。 3. 配置为剥离 标签,或强制执行严格的 URI 白名单以阻止外部和协议相对 URL。 概念验证 (POC) Mermaid 代码块: 渲染后的 SVG 输出: 攻击步骤: 1. 攻击者创建一个包含上述 Mermaid 块的笔记。 2. 攻击者在 上托管监听器(如 Responder)。 3. 受害者导入笔记或打开共享笔记。 4. SiYuan 渲染 Mermaid 图表,通过 注入 SVG。 5. Electron 获取 。 6. 在 Windows 上,Electron 将协议相对 URL 解析为 UNC 路径。Windows 向攻击者的 SMB 服务器发送 NTLMv2 凭据。