{"id":"GHSA-849r-qrwj-8rv4","summary":"Directus allows unauthenticated access to WebSocket events and operations","details":"### Summary\nWhen 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.\n\n### Details\nAccountability 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.\n\n### PoC\n1. Start directus with\n```bash\nWEBSOCKETS_ENABLED=true\nWEBSOCKETS_GRAPHQL_AUTH=public\nWEBSOCKETS_REST_AUTH=public\n```\n\n2. Subscribe using GQL or REST or do any CRUD operation on a user created collection (system tables are not reachable with crud)\n```gql\nsubscription {\n    directus_users_mutated {\n        key\n        event\n        data {\n            id\n            email\n            first_name\n            last_name\n            password\n        }\n    }\n}\n```\nor\n```json\n{\n   \"type\": \"items\",\n   \"action\": \"read\",\n   \"collection\": \"your_collection_name\"\n}\n```\n3a. 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)\n\n3b. Observe receiving all available items from the `your_collection_name` collection.\n\n### Impact\n\nThis 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.\n\n","aliases":["CVE-2024-54151"],"modified":"2024-12-09T21:54:13Z","published":"2024-12-09T20:40:54Z","database_specific":{"severity":"HIGH","github_reviewed":true,"github_reviewed_at":"2024-12-09T20:40:54Z","nvd_published_at":"2024-12-09T21:15:08Z","cwe_ids":["CWE-200"]},"references":[{"type":"WEB","url":"https://github.com/directus/directus/security/advisories/GHSA-849r-qrwj-8rv4"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2024-54151"},{"type":"WEB","url":"https://github.com/directus/directus/commit/ce0397d16cf767b5293cd57f626c5349b5732a21"},{"type":"PACKAGE","url":"https://github.com/directus/directus"}],"affected":[{"package":{"name":"directus","ecosystem":"npm","purl":"pkg:npm/directus"},"ranges":[{"type":"SEMVER","events":[{"introduced":"11.0.0"},{"fixed":"11.3.0"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2024/12/GHSA-849r-qrwj-8rv4/GHSA-849r-qrwj-8rv4.json"}},{"package":{"name":"@directus/api","ecosystem":"npm","purl":"pkg:npm/%40directus/api"},"ranges":[{"type":"SEMVER","events":[{"introduced":"22.2.0"},{"fixed":"23.2.0"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2024/12/GHSA-849r-qrwj-8rv4/GHSA-849r-qrwj-8rv4.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"}]}