CVE-2025-53887: Directus < 11.9.0 - Version Disclosure

2026-08-26 Directus PoC Public

Description

Directus versions from 9.0.0 before 11.9.0 expose the exact running version through the OpenAPI specification returned by the unauthenticated /server/specs/oas endpoint. The version is placed in the OpenAPI info.version field, letting an unauthenticated attacker fingerprint the precise Directus release. The fix replaces the exact version in that field with a hashed value.

PoC

id: CVE-2025-53887

info:
  name: Directus < 11.9.0 - Version Disclosure
  author: ChrisJr404
  severity: medium
  description: |
    Directus versions from 9.0.0 before 11.9.0 expose the exact running version through the OpenAPI specification returned by the unauthenticated /server/specs/oas endpoint. The version is placed in the OpenAPI info.version field, letting an unauthenticated attacker fingerprint the precise Directus release. The fix replaces the exact version in that field with a hashed value.
  impact: |
    An unauthenticated attacker can read the exact Directus version and use it to look up known vulnerabilities in that release or its bundled dependencies.
  remediation: |
    Upgrade to Directus 11.9.0 or later, where the OpenAPI info.version field no longer contains the exact version.
  reference:
    - https://github.com/directus/directus/security/advisories/GHSA-rmjh-cf9q-pv7q
    - https://github.com/directus/directus/pull/25353
    - https://github.com/directus/directus/commit/e74f3e4e92edc33b5f83eefb001a3d2a85af17a3
    - https://nvd.nist.gov/vuln/detail/CVE-2025-53887
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
    cvss-score: 5.3
    cve-id: CVE-2025-53887
    epss-score: 0.0092
    epss-percentile: 0.5853
    cwe-id: CWE-200
  metadata:
    verified: false
    max-request: 1
    vendor: monospace
    product: directus
    shodan-query: 'X-Powered-By: Directus'
    fofa-query: 'header="X-Powered-By: Directus"'
  tags: cve,cve2025,directus,exposure,disclosure,vuln

http:
  - method: GET
    path:
      - "{{BaseURL}}/server/specs/oas"

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "Dynamic API Specification"
          - "This is a dynamically generated API specification"
        condition: and

      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'compare_versions(version, ">= 9.0.0", "< 11.9.0")'
        condition: and

    extractors:
      - type: regex
        name: version
        group: 1
        regex:
          - 'dynamically generated API specification for all endpoints existing on the current project\.",\s*"version":\s*"([0-9]+\.[0-9]+\.[0-9]+)"'
# digest: 4a0a0047304502205302014618cd3d82a6176e567e99f0df2a0cf96a3d354f6271ffb02a8000a1e5022100c5122a131898bf909818cc3bf075f9979ec874c514b246348c1a3f2a56e2cbfe:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

Related Vulnerabilities