highCVSS 8.6Vulnerability

CVE-2026-61836

## Summary When response caching is enabled (`CACHE_ENABLED=true`), the cache-key derivation in `api/src/utils/get-cache-key.ts` includes only `version`, `path`, `query`, and `accountability.user` (plus a conditional `ip`). Authorization context beyond `user` (`share`, `role`, `roles`, `admin`, `app`, `policies`) is not part of the key. For share tokens this is load-bearing. Directus's share-authentication flow (`api/src/services/shares.ts:100-105`) issues a JWT without an `id` claim, so `api/src/utils/get-accountability-for-token.ts` never assigns `accountability.user`, leaving it `null` (the default from `create-default-accountability.ts`). Every share token, and every anonymous request, therefore reduces to `user: null` in the cache-key input. Two different shares (or an anonymous request and a share token) requesting the same URL with the same query produce identical cache keys. The first request populates the bucket with a permission-filtered response; subsequent hits from unrelated shares or anonymous clients receive that payload without any permission re-evaluation. This is the web-cache pattern "authorization-dependent response cached under an unsegmented key" (cache key collision / missing authorization context in cache key, CWE-524 and CWE-639). Two adjacent read populations collide: - **Share to share:** `Share A` populates the cache, `Share B` reads `Share A`'s scoped response. - **Share to anonymous** (and the reverse): any unauthenticated client hitting the same URL retrieves cached share-scoped data without presenting any token. ## Affected - Config required: `CACHE_ENABLED=true` (any store: memory, redis, memcached) plus at least one active `directus_shares` row. This is not a default-on bug: `CACHE_ENABLED` ships as `false`. The cache is documented as a production performance setting, so operators who enable it are the ones affected. ## Vulnerability class - **CWE-524:** Use of Cache Containing Sensitive Information - **CWE-639:** Authorizat

Properties

severity
high
summary
Directus: Authorization-dependent response served from unsegmented cache key
epss_score
0.00474
cvss_score
8.6
ghsa_published
2026-07-20T21:48:15Z
source_url
https://github.com/advisories/GHSA-c6w9-5g5j-jh2p
ghsa_updated
2026-07-20T21:48:16Z
ghsa_id
GHSA-c6w9-5g5j-jh2p
cve_id
CVE-2026-61836
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
is_ghsa_only
false
epss_percentile
0.39248

Related Entities (6)

ENRICHED_BY (1)

[Source]FIRST EPSS

VULNERABLE_TO (1)

[Software]npm/directus

AFFECTS (1)

[Software]npm/directus

HAS_WEAKNESS (2)

[Weakness]Use of Cache Containing Sensitive Information
[Weakness]Authorization Bypass Through User-Controlled Key

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-61836 (CVSS 8.6) — Ninja Signal Threat Intelligence | Ninja Signal