🔴 【深度分析】严重安全漏洞:CVE-2026-66012

CVSS 评分: 严重(10.0)🔴  状态: Deferred  发布时间: 2026-07-25


🔍 技术细节速览

字段
CVE ID CVE-2026-66012
CVSS 评分 10.0 🔴
严重程度 严重
CVSS 向量 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/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-862
发布时间 2026-07-25
最后更新 2026-07-28
状态 Deferred
数据来源 disclosure@vulncheck.com

CVSS 评分:10.0(严重)
CVSS 向量: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
CWE: CWE-862(Missing Authorization)
受影响版本: SiYuan < v3.7.2


漏洞概述

CVE-2026-66012 是开源笔记软件 SiYuan(思源笔记)中存在的一处缺失授权漏洞。漏洞位于内核的 POST /mcp 端点,该端点仅通过通用身份检查(model.CheckAuth)进行门槛校验,未强制要求管理员角色或只读模式。在特定配置下,远程、未认证的攻击者可利用该漏洞调用 31 个 MCP(Model Context Protocol)工具,实现任意文件读取/写入、插件植入乃至管理员级接管

CVSS 4.0 评分为满分 10.0,攻击向量为网络(AV:N)、攻击复杂度低(AC:L)、无需权限(PR:N)、无需用户交互(UI:N),且对机密性、完整性、可用性均造成完全影响,同时波及系统(SC/SI/SA),属于可远程直接利用的极高危漏洞


受影响组件与版本

组件 影响范围
SiYuan(思源笔记) 所有 v3.7.2 之前的版本

根据 NVD 数据,该漏洞在 v3.7.2 中被修复。建议使用 3.7.2 以下版本的用户立即评估并升级。


漏洞原理分析

1. 缺失授权:`/mcp` 端点只校验“是否登录”

SiYuan 内核提供了 MCP 服务端点 POST /mcp,用于暴露一组工具供 AI 模型或外部程序调用。从漏洞描述看,该端点的访问仅通过 model.CheckAuth 进行通用身份检查——即只要请求携带有效 JWT(无论其角色如何),即可访问全部 MCP 工具。

关键问题在于:

  • 未验证用户是否为管理员(admin-role);
  • 未对敏感操作施加“只读”或“可写”的角色区分;
  • 暴露的 31 个 MCP 工具中,包含一个文件操作工具,支持 list/read/write/delete/rename/copy 等操作,且作用于整个工作区

这意味着,任一低权限或匿名角色持有者,只要能通过认证检查,即可调用等同于管理员权限的文件操作接口。

2. 匿名发布模式:将“登录”也一并绕过

更严重的是,SiYuan 的发布(Publish)服务器在配置为匿名模式时,会主动“赋予”请求一个匿名身份:

Conf.Publish.Enable = true
Conf.Publish.Auth.Enable = false

此时,发布反向代理会将一个包含 RoleReader 角色的匿名 JWT 附加到所有代理请求上。由于 /mcp 端点只验证 JWT 的有效性,而不校验角色,这个匿名 JWT 恰好能通过 model.CheckAuth

攻击链路如下:

  1. 攻击者向发布服务器发送请求,路径被反向代理转发至内核 /mcp
  2. 代理自动附加匿名 RoleReader JWT;
  3. 内核校验 JWT 通过,未检查角色;
  4. 攻击者获得 MCP 工具调用权限。

因此,在“发布服务开启 + 匿名访问”的配置下,远程未认证攻击者可以完全绕过认证,直接访问 MCP 端点。

3. 从任意文件读写到管理员接管

利用 MCP 文件工具,攻击者可执行以下攻击链:

  1. 读取敏感配置:读取 conf/conf.json,获得明文存储的 accessAuthCodeapi.tokencookieKey 等核心密钥;
  2. 写入任意文件:在工作区任意位置写入恶意文件;
  3. 植入插件:将恶意插件写入 data/plugins/ 目录;
  4. 在桌面端获得代码执行:SiYuan 桌面端以 nodeIntegration:true 且关闭 contextIsolation 的方式加载插件,恶意插件在下次桌面端启动时自动执行,从而获取管理员级系统权限

该攻击链从远程无认证开始,最终可导致运行 SiYuan 的宿主机被完全控制。


影响评估

攻击条件与复杂度

因素 评估
攻击向量(AV) 网络(N),远程可利用
攻击复杂度(AC) 低(L),无需特殊条件
所需权限(PR) 无(N),默认匿名模式即为未认证
用户交互(UI) 无(N)
机密性影响 高(H),可读取任意文件、明文密钥
完整性影响 高(H),可写任意文件、植入插件
可用性影响 高(H),可删除/重命名/覆盖关键文件

实际可利用性

  • 前置条件:需要存在公开可达的发布服务,且配置为匿名模式(Publish.Enable=truePublish.Auth.Enable=false)。该配置对许多用户而言是常见用法(例如将笔记发布为公开网站),因此暴露面较大。
  • 利用难度:极低。无需账号,无需用户交互,发送构造的 MCP JSON-RPC 请求即可。
  • 影响后果:如果攻击者仅止步于读取 conf.json,即可获取 API token 和 Cookie 密钥,进而冒充管理员会话;若进一步写入插件,可在桌面端获得任意代码执行,实现管理员级别的系统接管

风险评级

CVSS 10.0(严重) 完全合理。该漏洞同时具备远程、无认证、低复杂度、高影响的特点,属于可自动化批量利用的漏洞。

注意:NVD 当前漏洞状态为 Deferred,意味着官方尚未完全确认或修复流程仍在推进中。但根据描述,修复版本 v3.7.2 已发布。由于涉及未授权远程代码执行,建议用户立即升级,不要等待延迟处理。


修复建议

1. 升级版本

  • 立即升级至 SiYuan v3.7.2 或更高版本
  • 在升级前,请确认新版本对 /mcp 端点实施了完整的授权校验(包括角色验证、只读模式限制等)。

2. 临时缓解措施

如果暂时无法升级,请采取以下措施:

  1. 禁止匿名发布

    • Conf.Publish.Auth.Enable 设置为 true,要求所有发布访问者进行身份认证;
    • 或直接将 Conf.Publish.Enable 设为 false,完全关闭发布服务。
  2. 限制网络访问

    • 不要将发布服务直接暴露到公网,或仅限可信 IP/内网访问;
    • 使用反向代理/VPN 进行访问控制。
  3. 隔离运行环境

    • 如果必须保留发布服务,建议将 SiYuan 运行在低权限容器或虚拟机中,避免插件执行导致宿主机沦陷;
    • 设置系统防火墙,禁止非必要端口对外开放。

3. 安全加固

  • 检查已部署环境中是否存在被利用痕迹(如 data/plugins/ 下出现未知插件、conf/conf.json 被访问的日志)。
  • 若曾经暴露于公网,建议重置 accessAuthCodeapi.tokencookieKey,并清理工作区中的异常文件。
  • 关注 SiYuan 官方安全公告,跟进后续补丁与推荐配置。

参考资料


总结

CVE-2026-66012 是典型的“认证正确但授权缺失”漏洞,叠加匿名发布模式对 JWT 的自动附加,形成了从“未认证”到“任意文件读写”再到“宿主系统接管”的完整攻击链。其 CVSS 10.0 的评分反映了极低的利用门槛和毁灭性的影响。所有 SiYuan 用户应将该漏洞视为最高优先级处理:立即升级到 v3.7.2,并检查是否曾暴露于危险配置之下。若无法升级,务必关闭匿名发布或将服务置于严格受控网络中。