🟠 高危 | CVE-2026-61836 — Directus is a real-time API and App dashboard for ...
🟠 【深度分析】高危安全漏洞:CVE-2026-61836
CVSS 评分: 高危(8.6)🟠 状态: Awaiting Analysis 发布时间: 2026-07-15
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-61836 |
| CVSS 评分 | 8.6 🟠 |
| 严重程度 | 高危 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| CWE 分类 | CWE-524,CWE-639 |
| 发布时间 | 2026-07-15 |
| 最后更新 | 2026-07-15 |
| 状态 | Awaiting Analysis |
| 数据来源 | security-advisories@github.com |
好的,作为一名资深网络安全分析师,我将基于您提供的 NVD 数据,为您生成一篇专业的漏洞深度分析文章。
CVSS 评分:8.6 (高危)
CVSS 向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
危害等级:高危
漏洞概述
CVE-2026-61836 是一个存在于 Directus(一个用于管理 SQL 数据库内容的实时 API 和应用仪表板)中的高危权限绕过漏洞。
该漏洞的核心问题在于其响应缓存机制存在缺陷:系统在生成缓存键(Cache-Key)时,未能将完整的认证与授权上下文纳入考量。这导致使用不同权限凭证(如不同的 Share Token 或匿名用户)的客户端,在请求相同 URL 时,可能会获取到其他用户或角色经过权限过滤后的缓存数据,而无需经过权限的重新校验。
简单来说,一个普通用户甚至匿名用户,可能通过利用缓存机制,访问到本应属于其他角色或拥有更高访问权限的用户的 API 响应数据。该漏洞主要威胁数据的机密性,攻击者无需认证即可利用(AV:N/AC:L/PR:N/UI:N),且影响范围可能扩散至其他安全域(S:C)。
影响范围:Directus 12.0.0 之前的所有版本。
受影响组件与版本
- 软件:Directus
- 受影响版本:所有低于 12.0.0 的版本
- 固定版本:12.0.0
漏洞原理分析
根据现有信息,漏洞的成因非常清晰,主要涉及缓存键的派生逻辑缺陷。
缓存机制:Directus 为提高性能,提供了响应缓存功能。为了区分不同的请求,系统会生成一个唯一的“缓存键”(Cache-Key)。如果两个请求的缓存键相同,系统会直接返回缓存的结果,而无需再次查询数据库或执行权限检查。
缺陷位置:漏洞存在于
api/src/utils/get-cache-key.ts文件中。该函数负责生成缓存键。开发者已知的缓存键构成元素包括:- 版本(version)
- 路径(path)
- 查询参数(query)
- 用户(accountability.user)中的用户名或用户ID。
缺失的关键上下文:问题在于,缓存键遗漏了关键的授权上下文信息。根据 NVD 描述,它没有包含诸如:
- share: 共享链接的唯一标识符。
- role 和 roles: 用户所分配的角色信息。
- admin: 用户是否具有管理员权限。
- app: 用户是否来自App端点。
- policies: 用户适用的具体策略。
攻击向量:当两个不同的 Share Token 请求完全相同的 URL 和查询参数时:
- 如果 Share Token A 拥有对某些记录的读取权限,Token B 没有。由于缓存键只包含了
path和query,而两个请求的path和query相同,且都可能是匿名(user 为 null)的上下文,系统会认为这是同一个请求。 - Token A 的请求首先到达,后端执行了权限检查并返回了过滤后的数据,然后该响应被缓存。
- Token B 的请求随后到达,系统发现缓存命中,直接将 Token A 的缓存响应返回给 Token B。
- 结果:Token B 成功获取了其本无权访问的数据,发生了水平权限提升或信息泄露。
- 如果 Share Token A 拥有对某些记录的读取权限,Token B 没有。由于缓存键只包含了
同理,该问题也适用于多个匿名用户之间的缓存冲突,或者匿名用户与一个拥有特定权限的访客用户之间的缓存冲突,因为当用户未登录时,accountability.user 的值都是 null。
影响评估
- 攻击复杂度(AC:L):低。攻击者不需要复杂的操作,只需发送两个不同的 HTTP 请求即可。缓存机制的利用通常不需要特殊技能。
- 所需权限(PR:N):无需。攻击者可以以匿名用户身份发起攻击,这使得攻击门槛极低。
- 用户交互(UI:N):无需。攻击不需要诱导其他用户点击或进行任何操作,完全可以通过自动化脚本完成。
- 攻击向量(AV:N):网络。攻击者可以通过网络远程利用此漏洞。
- 影响范围(S:C):已改变。漏洞影响的资产超出了初始授权范围。一个低权限请求可能获取到高权限数据的缓存。
- 机密性影响(C:H):高。该漏洞将直接导致严重的数据泄露,攻击者可能获取到其无权访问的敏感数据。
- 完整性影响(I:N):无。攻击者只能读取被错误缓存的响应,无法篡改数据。
- 可用性影响(A:N):无。漏洞不影响系统的正常功能。
潜在后果:攻击者可以利用此漏洞,在不同用户、角色或共享链接之间任意读取敏感的 API 数据,造成严重的信息泄露。这对于那些依赖 Directus 管理核心业务数据(如用户信息、商业机密、财务数据等)的组织来说,是毁灭性的。
修复建议
官方修复
升级到 Directus 12.0.0 或更高版本。
临时缓解措施
如果无法立即升级,可以考虑以下临时措施:
- 禁用响应缓存:在配置文件中完全禁用响应缓存。这虽然会牺牲部分性能,但能从根本上消除此漏洞。请参考 Directus 官方文档了解如何关闭缓存。
- 配置反向代理缓存:如果必须使用缓存,考虑在 Nginx 或 Varnish 等反向代理层实现更严格的缓存策略。通过配置
Vary响应头来为不同的用户上下文(如Cookie、Authorization头)创建不同的缓存。- 重要提示:反向代理的缓存策略需要精心配置,错误配置同样可能导致信息泄露。临时措施存在风险,强烈建议尽快升级。
参考资料
- CVE 详情页: https://nvd.nist.gov/vuln/detail/CVE-2026-61836
- CWE 分类:
- CWE-524: Use of Cache Containing Sensitive Information (使用包含敏感信息的缓存)
- CWE-639: Authorization Bypass Through User-Controlled Key (通过用户控制的键绕过授权)
- 原始安全公告: 本分析基于 security-advisories@github.com 发布的原始数据。
- Directus 官方发布: 请关注 Directus 官方 GitHub 仓库的 Release 页面,获取 12.0.0 版本的发布说明。