GHSA-849r-qrwj-8rv4

Suggest an improvement
Source
https://github.com/advisories/GHSA-849r-qrwj-8rv4
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2024/12/GHSA-849r-qrwj-8rv4/GHSA-849r-qrwj-8rv4.json
JSON Data
https://api.test.osv.dev/v1/vulns/GHSA-849r-qrwj-8rv4
Aliases
Related
Published
2024-12-09T20:40:54Z
Modified
2024-12-09T21:54:13Z
Severity
  • 7.5 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N CVSS Calculator
Summary
Directus allows unauthenticated access to WebSocket events and operations
Details

Summary

When setting WEBSOCKETS_GRAPHQL_AUTH or WEBSOCKETS_REST_AUTH to "public", an unauthenticated user is able to do any of the supported operations (CRUD, subscriptions) with full admin privileges.

Details

Accountability for unauthenticated WebSocket requests is set to null, which used to be "public permissions" until the Permissions Policy update which now defaults that to system/admin level access. So instead of null we need to make use of createDefaultAccountability() to ensure public permissions are used for unauthenticated users.

PoC

  1. Start directus with

    WEBSOCKETS_ENABLED=true
    WEBSOCKETS_GRAPHQL_AUTH=public
    WEBSOCKETS_REST_AUTH=public
    
  2. Subscribe using GQL or REST or do any CRUD operation on a user created collection (system tables are not reachable with crud)

    subscription {
        directus_users_mutated {
            key
            event
            data {
                id
                email
                first_name
                last_name
                password
            }
        }
    }
    

    or

    {
       "type": "items",
       "action": "read",
       "collection": "your_collection_name"
    }
    

    3a. Open up the data studio as any user. Observe how the subscriber gets notified on each page navigation (because the users last_page gets updated, the password fields is properly redacted here)

3b. Observe receiving all available items from the your_collection_name collection.

Impact

This impacts any Directus instance that has either WEBSOCKETS_GRAPHQL_AUTH or WEBSOCKETS_REST_AUTH set to public allowing unauthenticated users to subscribe for changes on any collection or do REST CRUD operations on user defined collections ignoring permissions.

Database specific
{
    "nvd_published_at": "2024-12-09T21:15:08Z",
    "cwe_ids": [
        "CWE-200"
    ],
    "severity": "HIGH",
    "github_reviewed": true,
    "github_reviewed_at": "2024-12-09T20:40:54Z"
}
References

Affected packages

npm / directus

Package

Affected ranges

Type
SEMVER
Events
Introduced
11.0.0
Fixed
11.3.0

npm / @directus/api

Package

Name
@directus/api
View open source insights on deps.dev
Purl
pkg:npm/%40directus/api

Affected ranges

Type
SEMVER
Events
Introduced
22.2.0
Fixed
23.2.0