High

GraphQL grant on a property might be cached with different objects

  • Disclosed: 04.04.2025
  • Updated: 11.10.2026 10:22

Original message:

I found an issue with security grants on on properties in the GraphQL ItemNormalizer:

If you use something like #[ApiProperty(security: 'is_granted("PROPERTY_READ", [object, property])')] on a member of an entity, the grant gets cached and is only evaluated once, even if the object in question is a different one.

There is the ApiPlatform\GraphQl\Serializer\ItemNormalizer::isCacheKeySafe() method that seems to be intended to prevent this: https://github.com/api-platform/core/blob/88f5ac50d20d6510686a7552310cc567fcca45bf/src/GraphQl/Serializer/ItemNormalizer.php#L160-L164
and in its usage on line 90 it does indeed not create a cache key, but the parent::normalize() that is called afterwards still creates the cache key and causes the issue.

Impact

It grants access to properties that it should not.

Workarounds

Override the ItemNormalizer.

Patched at: https://github.com/api-platform/core/commit/7af65aad13037d7649348ee3dcd88e084ef771f8

Affected software

Click a technology to see all vulnerabilities affecting it.

PlatformPackageVulnerable versionsFixed in
Composer package api-platform/core >= 4.0.0-alpha.1, < 4.0.22, < 3.4.17, >= 4.1.0-alpha.1, < 4.1.5 4.0.22, 3.4.17, 4.1.5
Composer package api-platform/graphql >= 4.0.0-alpha.1, < 4.0.22, < 3.4.17, >= 4.1.0-alpha.1, < 4.1.5 4.0.22, 3.4.17, 4.1.5

References

CVSS score 7.5/10
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weakness (CWE)
CWE-696
Platform
Composer
Package
api-platform/core, api-platform/graphql
Disclosed
04.04.2025
Updated
11.10.2026 10:22

Sources and licenses

OSV / GitHub Advisory Database - GHSA-428q-q3vv-3fq3 - CC BY 4.0

Vulnerability history: api-platform/core

All published vulnerabilities of this package (Composer package), newest first. Shows whether this is a one-off slip or a package that needs watching.

Total entries
8
First → latest
10.2019 08.2026
Without a fix
0
Exploited in attacks
0

Severity breakdown

  • High 3
  • Medium 5

Disclosures per year

  1. 2019: 1
  2. 2020: 0
  3. 2021: 0
  4. 2022: 0
  5. 2023: 1
  6. 2024: 0
  7. 2025: 4
  8. 2026: 2
  1. Medium · 6.5 CVE-2026-54164 < 4.1.30, >= 4.2.0, < 4.2.26, >= 4.3.0, < 4.3.12 4.1.30, 4.2.26, 4.3.12
  2. Medium · 5.9 CVE-2026-49858 >= 2.6.0, < 4.1.29, >= 4.2.0, < 4.2.25, >= 4.3.0, < 4.3.8 4.1.29, 4.2.25, 4.3.8
  3. GraphQL grant on a property might be cached with different objects this entry
    High · 7.5 CVE-2025-31485 >= 4.0.0-alpha.1, < 4.0.22, < 3.4.17, >= 4.1.0-alpha.1, < 4.1.5 4.0.22, 3.4.17, 4.1.5
  4. High · 7.5 CVE-2025-31481 >= 4.0.0-alpha.1, < 4.0.22, < 3.4.17, >= 4.1.0-alpha.1, < 4.1.5 4.0.22, 3.4.17, 4.1.5
  5. Medium · 4.4 CVE-2025-23204 >= 3.3.8, < 3.3.15 3.3.15
  6. High · 7.7 CVE-2023-25575 >= 3.0.0, < 3.0.12, >= 3.1.0, < 3.1.3, >= 2.6.0, < 2.7.10 3.0.12, 3.1.3, 2.7.10
  7. Medium · 6.5 CVE-2019-1000011 >= 2.2.0, < 2.2.10, >= 2.3.0, < 2.3.6 2.2.10, 2.3.6

Know which vulnerabilities affect your application

With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.

Connect your application
DockRay newsletter

Application security in your inbox

Important vulnerabilities, actionable guidance and practical advice for your applications. Choose your technologies and follow what matters to your project.

  • A daily digest of new vulnerabilities, critical ones included.
  • Notifications about important updates.
  • Practical advice on application security and monitoring.

Leave empty to receive updates for every technology.

Free to subscribe. Unsubscribe with one click in any email.