CVE-2026-39943 Overview
CVE-2026-39943 is an information disclosure vulnerability in Directus, an open-source real-time API and application dashboard for managing SQL database content. Versions prior to 11.17.0 store revision records in the directus_revisions table whenever items are created or updated. The revision snapshot code does not consistently invoke the prepareDelta sanitization pipeline. Sensitive fields including user tokens, two-factor authentication secrets, external auth identifiers, auth data, stored credentials, and AI provider API keys can be persisted in plaintext within revision records. The issue is tracked as CWE-200: Exposure of Sensitive Information to an Unauthorized Actor and is fixed in Directus 11.17.0.
Critical Impact
Authenticated users with access to revision records can read plaintext credentials, 2FA secrets, and API keys that should remain encrypted or redacted.
Affected Products
- Monospace Directus versions prior to 11.17.0
- Directus deployments running on Node.js
- Directus instances retaining historical directus_revisions data
Discovery Timeline
- 2026-04-09 - CVE-2026-39943 published to NVD
- 2026-04-14 - Last updated in NVD database
Technical Details for CVE-2026-39943
Vulnerability Analysis
Directus maintains a versioning system that snapshots item state into the directus_revisions table whenever content is created or updated. This audit trail is intended to support rollback and change tracking. Directus normally relies on a sanitization routine, prepareDelta, to strip or redact sensitive fields before persisting them.
In affected releases, the revision snapshot code path does not consistently call prepareDelta. As a result, fields that the platform otherwise treats as secret are written into revision records as plaintext. The exposed categories include user API tokens, time-based one-time password (TOTP) secrets used for two-factor authentication, external authentication provider identifiers, generic authentication payloads, stored service credentials, and API keys configured for AI provider integrations.
Any actor with read access to directus_revisions can retrieve these secrets directly from the database or through the Directus API. The exposure also persists across record lifecycles, so historic revisions continue to contain plaintext secrets even after the live item is updated or rotated.
Root Cause
The defect is an inconsistent application of an existing sanitization control. The prepareDelta function provides field-level redaction for sensitive attributes, but the revision creation logic bypasses this pipeline in certain code paths. The vulnerability is a missing security control rather than a flaw in cryptography or input parsing.
Attack Vector
Exploitation requires network access to the Directus API and authenticated privileges sufficient to query the revisions collection. An attacker who is a low-privileged authenticated user, or who has compromised any account with revision read access, can enumerate directus_revisions entries and extract plaintext credentials. Database operators, backup readers, and downstream analytics consumers of the same table are also exposed.
No verified public proof-of-concept is available. Refer to the GitHub Security Advisory GHSA-mvv8-v4jj-g47j for vendor details.
Detection Methods for CVE-2026-39943
Indicators of Compromise
- Presence of plaintext values resembling API tokens, TOTP secrets, or provider keys inside directus_revisions.data or directus_revisions.delta columns.
- Unusual read volume against the revisions endpoint or direct SQL queries targeting directus_revisions from non-administrative accounts.
- Exported database backups or analytics replicas containing readable secrets in revision rows.
Detection Strategies
- Run database queries against directus_revisions to search for patterns matching known secret formats such as bearer tokens, base32 TOTP seeds, and vendor API key prefixes.
- Audit Directus access logs for authenticated calls to /revisions and correlate with the requesting user, role, and originating IP.
- Review identity provider and AI provider audit trails for credential reuse anomalies that could indicate prior extraction.
Monitoring Recommendations
- Alert on any non-administrative role issuing read operations against the revisions collection or the underlying table.
- Monitor for unexpected outbound API calls using credentials that exist within Directus configuration, including AI provider keys.
- Track Directus version inventory and flag any instance running a release earlier than 11.17.0.
How to Mitigate CVE-2026-39943
Immediate Actions Required
- Upgrade Directus to version 11.17.0 or later on all production and non-production instances.
- Purge or sanitize historical rows in directus_revisions that were written by vulnerable versions before rotating secrets.
- Rotate all potentially exposed secrets, including user tokens, 2FA enrollments, SSO client secrets, stored credentials, and AI provider API keys.
- Review role permissions to ensure only trusted administrators can read the revisions collection.
Patch Information
The fix is included in Directus 11.17.0, which ensures the revision snapshot pipeline consistently invokes prepareDelta so sensitive fields are sanitized before persistence. See the Directus v11.17.0 release notes and the GitHub Security Advisory GHSA-mvv8-v4jj-g47j.
Workarounds
- Restrict the directus_revisions collection to administrator-only read access through Directus role and permission policies.
- Disable or prune revision history for collections containing sensitive fields until the upgrade is applied.
- Encrypt database backups at rest and limit replica access to reduce secondary exposure of plaintext secrets.
# Upgrade Directus using npm
npm install directus@^11.17.0
# Or upgrade the official Docker image
docker pull directus/directus:11.17.0
docker compose up -d
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

