🔴 严重 | CVE-2026-65605 — SiYuan before v3.7.2 contains a stored cross-site ...
🔴 【深度分析】严重安全漏洞:CVE-2026-65605
CVSS 评分: 严重(9.4)🔴 状态: Deferred 发布时间: 2026-07-23
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-65605 |
| CVSS 评分 | 9.4 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-79 |
| 发布时间 | 2026-07-23 |
| 最后更新 | 2026-07-23 |
| 状态 | Deferred |
| 数据来源 | disclosure@vulncheck.com |
⚠️ CVSS 4.0 评分:9.4(严重)
向量:CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
危害等级:Critical(严重)
状态:NVD 标记为 Deferred(待评估),但 PoC 细节已公开
漏洞概述
CVE-2026-65605 是开源笔记应用 SiYuan(思源笔记) 中属性视图(Attribute View)数据库单元格渲染模块的一个 存储型跨站脚本(Stored XSS)漏洞。攻击者无需认证即可在 Template 类型的列中注入恶意 HTML/JavaScript 负载,当其他用户(或受害者)打开包含该数据行的数据库视图时,负载会被无过滤执行。更严重的是,由于 桌面端渲染器默认启用了 nodeIntegration,该 XSS 可进一步升级为 任意命令执行(RCE),直接影响主机安全。
受影响的版本为 SiYuan 低于 v3.7.2。CVSS 4.0 评分高达 9.4,接近理论最高分,因为攻击复杂度低、网络可达、影响机密性/完整性/可用性(主机级+容器级)。
受影响组件与版本
| 组件 | 受影响版本范围 | 安全修复版本 |
|---|---|---|
| SiYuan(思源笔记)桌面端 & 服务端 | < v3.7.2 | v3.7.2 及以上 |
说明:漏洞存在于核心的模板渲染逻辑中,无论部署模式(桌面本地、服务器 Web 端)均受影响。桌面端因 nodeIntegration 开启导致影响更严重。
漏洞原理分析
1. 触发位置:属性视图的 Template 列
SiYuan 的属性视图(类似数据库表格)支持用户自定义列类型,其中包括 Template(模板) 列。该列允许用户使用 text/template 语法定义动态单元格内容(例如引用其他字段的值)。渲染时,内容被直接插入 DOM 的 innerHTML 属性中。
2. 不完整的 HTML 转义逻辑
开发者在渲染时尝试调用 EscapeHTML() 进行转义,但 条件判断存在缺陷:仅在 HasUnclosedHtmlTag() 返回 true 时才执行转义。而像 <img src=x onerror=...> 这类 自闭合标签(self-closing tag),其标签结构在 HTML 解析中是平衡的(<img ... /> 或 <img ... >),因此 HasUnclosedHtmlTag() 会返回 false,导致整个负载未经转义被存储并执行。
3. 攻击流程
- 注入阶段:攻击者通过添加/修改数据库记录,在 Template 列的值中写入类似
<img src=x onerror="alert(1)">的 payload。 - 存储阶段:payload 被持久化到用户数据库(
.sy文件或服务器存储)。 - 触发阶段:当受害者(包括其他协作者)打开该数据库视图时,客户端渲染函数调用
innerHTML插入该值,浏览器解析<img>标签时触发onerror事件,执行任意 JavaScript。
4. 从 XSS 到 RCE(桌面端特有)
SiYuan 桌面版基于 Electron 框架,渲染进程(renderer)默认开启 nodeIntegration: true。这意味着在渲染进程执行的 JavaScript 能够直接调用 Node.js 原生 API,如 require('child_process')。因此,攻击者可以注入如下 payload:
<img src=x onerror="require('child_process').execSync('calc.exe')">
无需额外绕过,即可在受害者主机上执行任意系统命令。
影响评估
| 评估维度 | 分析 |
|---|---|
| 攻击向量(AV:N) | 攻击者通过网络即可注入 payload,无需物理访问或邻近。 |
| 攻击复杂度(AC:L) | 仅需普通用户权限(如已注册用户或可编辑数据库的访客),无需特殊技巧。 |
| 所需权限(PR:N) | 对于公开共享的数据库,未授权用户也可直接注入(若系统配置允许)。即使需登录,一般用户权限即可。 |
| 用户交互(UI:P) | 受害者只需打开被污染的数据库视图,无需额外点击。 |
| 机密性/完整性/可用性影响 | 主机级(VC/VI/VA:H):可从网络中窃取文件、修改本地数据、执行恶意进程。容器级(SC/SI/SI:H):因 Electron 隔离不足,攻击者还可能影响其他渲染进程或主进程。 |
| 利用条件 | 需要目标数据库中存在 Template 列且可被攻击者编辑(常见于团队协作场景)。 |
实际威胁评级:极高。该漏洞可被用于钓鱼、数据窃取、勒索软件部署等攻击链。
修复建议
官方补丁
升级 SiYuan 至 v3.7.2 或更高版本。该版本修正了 Template 列的渲染逻辑,对所有内容强制执行 HTML 转义。
临时缓解措施(无法立即升级时)
- 禁用 nodeIntegration:修改 SiYuan 桌面版启动参数或配置文件,设置
webPreferences.nodeIntegration = false,可阻止 XSS 升级为 RCE(但 XSS 本身仍可能造成数据窃取)。 - 限制数据库编辑权限:对于团队协作实例,严格控制谁可以编辑属性视图中的 Template 列。
- 部署内容安全策略(CSP):若自建服务端,可在响应头中添加
Content-Security-Policy: default-src 'self'; script-src 'self'等策略,阻止内联脚本执行。但请注意,innerHTML插入的<img onerror>仍可能被触发,需配合script-src 'self'限制动态脚本。 - 使用 Web 端替代桌面端:临时使用浏览器访问 SiYuan Web 界面,并在浏览器中启用 XSS 过滤器(如 Chrome 的 XSS Auditor,但已废弃)。
检测方法
检查数据库中属性视图的 Template 列是否存在类似 <img src=、<script>、<svg onload= 等异常 HTML 标签。
参考资料
| 类型 | 链接 |
|---|---|
| NVD 官方页面 | https://nvd.nist.gov/vuln/detail/CVE-2026-65605 |
| CWE-79(跨站脚本) | https://cwe.mitre.org/data/definitions/79.html |
| SiYuan GitHub Release | https://github.com/siyuan-note/siyuan/releases/tag/v3.7.2 |
| Electron 安全文档 – nodeIntegration | https://www.electronjs.org/docs/latest/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content |
免责声明:本文基于 NVD 公开数据及漏洞描述撰写,部分技术细节推断自 CVSS 向量与已知攻击模式。具体利用方式请以官方或第三方 PoC 为准。请及时修复,避免造成损失。