Skip to main content
VulnerabilityPublished

CVE-2026-54164: api-platform core · Type Confusion

Affects api-platform coreSource CVE Database V5

0
Compare

Not known to be exploited · CVSS 6.5 Medium · fixed in 4.3.12 : update api-platform core when convenient.

Data as of 12 Nov 2026, 23:24 UTC

CVSS 3.1 base score
6.5Medium
How severe the flaw is on the 0–10 CVSS scale.
EPSS
0.3% chance of exploitation in 30 days – higher than 27% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
Patch
Available – fixed in 4.3.12, 4.2.26, 4.1.30
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 1 Jul 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 13 Nov 2026.

What to do

Upgrade core and api-platform/core to 4.3.12, 4.2.26 or 4.1.30.

Affected software

ProductAffectedFixed in
api-platformcoreAffected
  • >=4.3.0 <4.3.12
Fixed in
  • 4.3.12
api-platformcoreAffected
  • >=4.2.0 <4.2.26
Fixed in
  • 4.2.26
api-platformcoreAffected
  • <4.1.30
Fixed in
  • 4.1.30
GitHubapi-platform/corepkg:github/api-platform/coreOther threatsAffected
  • <4.1.30
  • <4.2.26
  • <4.3.12
Fixed in
  • 4.1.30
  • 4.2.26
  • 4.3.12

Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.

AI-suggested

A fix is available in api-platform/core versions 4.1.30, 4.2.26, and 4.3.12 that adds a type guard to reject mismatched IRIs with a 400 Bad Request error. Users should upgrade to one of these patched versions to fully remediate the vulnerability. As a partial workaround, declaring explicit PHP types on all writable relation properties will cause Symfony's PropertyAccessor to reject mismatched types with an InvalidTypeException, but this does not cover collections of mixed-type interfaces. Older major versions 2.x and 3.x are end-of-life and have no planned fixes, so upgrading is strongly recommended.

Description

## Summary The API Platform serializer's `AbstractItemNormalizer` does not validate the resource type returned when resolving relation IRIs, allowing type confusion where a resource of an unintended type can be silently assigned to a relation property. ## Impact An attacker who can submit write requests (POST/PUT/PATCH) to an API Platform endpoint with writable relations can supply a relation IRI pointing to a resource of a different type than the relation's declared class. Because `getResourceFromIri()` does not pass an `$operation` to `IriConverter::getResourceFromIri()`, the `is_a` type guard at `IriConverter.php:86` is skipped. For untyped relation properties (legacy `@var`-only style), the wrong-typed object is silently assigned, corrupting invariants and potentially feeding downstream logic that assumes the declared type (CWE-843). For typed properties (modern PHP 8.x), the substitution is blocked by Symfony's PropertyAccessor with an `InvalidTypeException`. ## Affected versions - `api-platform/core` `< 4.1.30` - `api-platform/core` `>= 4.2.0, < 4.2.26` - `api-platform/core` `>= 4.3.0, < 4.3.12` ## Patched versions - `4.1.30` - `4.2.26` - `4.3.12` ## Fix An `is_a` guard is added inside `AbstractItemNormalizer::getResourceFromIri()` (and the equivalent inline call sites on 4.1) so that a mismatched IRI throws `InvalidArgumentException`, mirroring the operation-aware check the `IriConverter` already performs when an operation is supplied. This forces a `400 Bad Request` response for cross-type IRIs instead of a silent assignment. ## Workarounds Declare a PHP type on every writable relation property (e.g. `public ?Foo $relation = null;` instead of `@var Foo $relation`). Symfony's `PropertyAccessor` will then reject a mismatched object with `InvalidTypeException`. This does not cover collections of mixed-type interfaces; upgrading to a patched version is the only complete fix. ## Proof of concept A functional test posts a `Bar` IRI to a `Foo`-declared relation on an untyped property. Without the fix the server responds with `HTTP 201` and the Bar IRI appears in the response payload. With the fix the server responds with `HTTP 400` (`Invalid IRI "/bars/1"`). Full PoC: `tests/Functional/Security/TypeConfusionRelationIriTest.php` in the patched branches. ## References - `src/Serializer/AbstractItemNormalizer.php` — vulnerable relation IRI load - `src/Symfony/Routing/IriConverter.php` — conditional `is_a` guard (operation-aware path) ## Credit Reported by @alexandre-daubois.

References

Community reviews

Loading reviews…