Summary
When GRAPHQL_INTROSPECTION=false is configured, Directus correctly blocks standard GraphQL introspection queries (__schema, __type). However, the server_specs_graphql resolver on the /graphql/system endpoint returns an equivalent SDL representation of the schema and was not subject to the same restriction. This allowed the introspection control to be bypassed, exposing schema structure (collection names, field names, types, and relationships) to unauthenticated users at the public permission level, and to authenticated users at their permitted permission level.
Impact
Administrators who set GRAPHQL_INTROSPECTION=false to hide schema structure from clients would have had a false sense of security, as equivalent schema information remained accessible via the SDL endpoint without authentication.
Credit
This vulnerability was discovered and reported by bugbunny.ai.
References
Summary
When
GRAPHQL_INTROSPECTION=falseis configured, Directus correctly blocks standard GraphQL introspection queries (__schema,__type). However, theserver_specs_graphqlresolver on the/graphql/systemendpoint returns an equivalent SDL representation of the schema and was not subject to the same restriction. This allowed the introspection control to be bypassed, exposing schema structure (collection names, field names, types, and relationships) to unauthenticated users at the public permission level, and to authenticated users at their permitted permission level.Impact
Administrators who set
GRAPHQL_INTROSPECTION=falseto hide schema structure from clients would have had a false sense of security, as equivalent schema information remained accessible via the SDL endpoint without authentication.Credit
This vulnerability was discovered and reported by bugbunny.ai.
References