VDB
Sign up
HIGH7.5

GHSA-cg3c-245w-728m

GraphQL query operations security can be bypassed

Quick fix

GHSA-cg3c-245w-728m — api-platform/graphql: upgrade to the fixed version with the command below.

composer require api-platform/graphql:^4.0.22

Details

### Summary

Using the Relay special `node` type you can bypass the configured security on an operation.

### Details

Here is an example of how to apply security configurations for the GraphQL operations:

```php #[ApiResource( security: "is_granted('ROLE_USER')", operations: [ /* ... */ ], graphQlOperations: [ new Query(security: "is_granted('ROLE_USER')"), //... ], )] class Book { /* ... */ } ```

This indeed checks `is_granted('ROLE_USER')` as expected for a GraphQL query like the following:

```php ‌query { book(id: "/books/1") { title } } ```

But the security check can be bypassed by using the `node` field (that is available by default) on the root query type like that:

```php ‌query { node(id: "/books/1") { ... on Book { title } } } ```

This does not execute any security checks and can therefore be used to access any entity without restrictions by everyone that has access to the API.

### Impact

Everyone using GraphQl with the `security` attribute. Not sure whereas this works with custom resolvers nor if this also applies on mutation.

Patched at https://github.com/api-platform/core/commit/60747cc8c2fb855798c923b5537888f8d0969568

Are you affected?

Enter the version of the package you're using.

Affected packages

Packagist/api-platform/graphql
Introduced in: 4.0.0-alpha.1Fixed in: 4.0.22
Fixcomposer require api-platform/graphql:^4.0.22
Packagist/api-platform/core
Introduced in: 4.0.0-alpha.1Fixed in: 4.0.22
Fixcomposer require api-platform/core:^4.0.22
Packagist/api-platform/graphql
Introduced in: 0Fixed in: 3.4.17
Fixcomposer require api-platform/graphql:^3.4.17
Packagist/api-platform/core
Introduced in: 0Fixed in: 3.4.17
Fixcomposer require api-platform/core:^3.4.17
Packagist/api-platform/graphql
Introduced in: 4.1.0-alpha.1Fixed in: 4.1.5
Fixcomposer require api-platform/graphql:^4.1.5
Packagist/api-platform/core
Introduced in: 4.1.0-alpha.1Fixed in: 4.1.5
Fixcomposer require api-platform/core:^4.1.5

References