CVE-2026-45147SiYuan是一款开源的个人知识管理系统。在3.7.0版本之前,该系统存在权限验证缺失漏洞。具体而言,`POST /api/tag/getTag`接口仅使用了`model.CheckAuth`进行基础身份验证,却未调用`model.CheckAdminRole`和`model.CheckReadonly`进行权限校验。由于该接口处理程序会执行配置写入操作(修改`model.Conf.Tag.Sort`并触发`model.Conf.Save()`),导致任何经过身份验证的用户(包括只读工作空间的RoleReader或RoleEditor账户)均可调用此端点并修改工作区的`conf.json`配置文件。该漏洞破坏了系统的完整性,已在3.7.0版本中修复。
该漏洞的根本原因在于SiYuan后端在处理特定API请求时的权限校验逻辑存在缺陷。在3.7.0之前的版本中,`POST /api/tag/getTag`接口被注册时仅使用了`model.CheckAuth`中间件,这意味着系统仅验证请求者是否为已登录用户,而未进一步检查用户角色(如通过`model.CheckAdminRole`)或工作空间的只读状态(`model.CheckReadonly`)。然而,该接口的处理函数内部包含了修改系统配置的逻辑,具体涉及`model.Conf.Tag.Sort`属性的变更以及随后的`model.Conf.Save()`调用。`Save()`方法会原子性地重写整个工作区的`conf.json`配置文件。由于缺乏高阶权限控制,任何拥有普通身份验证凭据的用户(包括仅具备只读权限的`RoleReader`账户)均可利用此漏洞。攻击者可以通过构造包含恶意`sort`参数的POST请求,诱使服务器以系统级权限修改配置文件,从而破坏系统的完整性或导致服务异常。