Vulnerability DatabaseCVE-2026-122053

CVE-2026-122053: 
PHP vulnerability analysis and mitigation

Overview

CVE-2026-122053 is a property-path traversal vulnerability in the Symfony Serializer component's ObjectNormalizer that allows untrusted input to modify properties of nested objects and bypass #[Ignore] metadata restrictions. Disclosed on November 4–6, 2026, it affects symfony/serializer versions 5.4.41–5.4.55, 6.4.9–6.4.49, 7.0.9–7.0.x, 7.1.2–7.4.22, and 8.0.0–8.1.10. It carries a CVSS v3.1 base score of 6.5 (Medium) and a CVSS v4.0 base score of 6.9 (Medium) (GitHub Advisory, Feedly).

Technical details

The root cause is CWE-915 (Improperly Controlled Modification of Dynamically-Determined Object Attributes). ObjectNormalizer::isAllowedAttribute() previously treated any attribute name containing a . (or [ from Symfony 6.4 onward) as writable without consulting class metadata, passing it directly to PropertyAccessor::setValue(), which parses it as a property path and traverses into nested objects. For example, a payload key customer.admin would write to $order->customer->admin, completely bypassing the #[Ignore] annotation on the nested Customer class. Additionally, because PropertyAccessor resolves path segments against public methods, a crafted segment matching a public method name can invoke that method with an attacker-controlled value. The fix, applied in commits fcaf87a (5.x branch) and 9f73906 (6.4+ branch), restricts property-path acceptance to only those paths explicitly declared in class metadata (GitHub Advisory, Symfony Commit 5.x, Symfony Commit 6.x+).

Impact

Successful exploitation allows an unauthenticated remote attacker to write arbitrary values to protected properties of nested objects in a Symfony application, bypassing serialization metadata guards such as #[Ignore]. This can lead to unauthorized privilege escalation (e.g., setting an admin flag to true), data integrity violations, and unintended invocation of public methods with attacker-supplied arguments. Applications using #[MapRequestPayload] or #[MapQueryString] with OBJECT_TO_POPULATE (common in REST APIs and partial-update endpoints) are particularly at risk, as modified fields may be persisted to a database (GitHub Advisory).

Exploitability

No public proof-of-concept exploit code or in-the-wild exploitation has been reported as of the disclosure date. The NVD SSVC assessment classifies exploitation as "none" and the vulnerability as automatable (Feedly). The EPSS score is approximately 0.327%, indicating a low probability of near-term exploitation. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. However, the attack requires no authentication, no user interaction, and no special privileges, making it straightforward to attempt against exposed endpoints (GitHub Advisory).

Exploitation steps

  1. Reconnaissance: Identify Symfony-based web applications exposing endpoints that accept JSON or form-encoded request bodies and bind them to objects using #[MapRequestPayload], #[MapQueryString], or direct ObjectNormalizer::denormalize() calls. Tools like Shodan, Censys, or manual inspection of API documentation can assist.
  2. Identify target object graph: Determine the root class being deserialized and identify nested objects with sensitive properties (e.g., admin, role, isVerified) that are annotated with #[Ignore] or otherwise expected to be non-writable from user input.
  3. Craft malicious payload: Construct a JSON payload that includes a dotted-key property path targeting the sensitive nested property. For example:
    {"qty": 1, "customer": {"name": "Mallory"}, "customer.admin": true}
  4. Submit the payload: Send the crafted request to the vulnerable endpoint via HTTP POST (or GET with query string for #[MapQueryString]), ensuring no serialization groups are specified in the context (as #[Groups] restrictions are not bypassed).
  5. Achieve unauthorized modification: The ObjectNormalizer passes customer.admin to PropertyAccessor, which traverses the object graph and sets $order->customer->admin = true, bypassing the #[Ignore] annotation. If the application persists the entity, the change is saved to the database (GitHub Advisory).

Indicators of compromise

  • Network: HTTP requests to API endpoints containing JSON keys with dot notation (e.g., "customer.admin", "user.role") or bracket notation (e.g., "values[first]") in the request body; these are abnormal for standard REST payloads.
  • Logs: Application or web server access logs showing POST/PUT/PATCH requests with unusually structured JSON bodies containing dotted keys; Symfony application logs recording unexpected property writes or method invocations on nested objects.
  • Application Behavior: Unexpected privilege escalation of user accounts (e.g., non-admin users gaining admin status); database records showing modifications to fields that should not be user-writable; audit logs showing changes to sensitive boolean flags (admin, verified, active) without corresponding legitimate user actions.

Mitigation and workarounds

Upgrade symfony/serializer (or symfony/symfony) to one of the patched versions: 5.4.56, 6.4.50, 7.4.23, or 8.1.11. The fix ensures that property paths (attribute names containing . or [) are only accepted during denormalization when the class metadata explicitly declares an attribute with that exact name; undeclared paths are silently ignored. As a workaround for applications that cannot immediately upgrade, ensure all deserialization endpoints use #[Groups] context restrictions, which prevent the bypass (the path fast-lane is only taken when no groups are passed). Additionally, review all controllers using #[MapRequestPayload] or #[MapQueryString] to confirm that sensitive nested properties are protected by explicit allowlists (GitHub Advisory, Symfony Commit 5.x, Symfony Commit 6.x+).

Community reactions

The vulnerability was reported by Alexandre Daubois and The PHP Foundation, and credited accordingly in the official GitHub Security Advisory. The fix was authored by nicolas-grekas, a core Symfony contributor. No significant broader media coverage or notable social media discussion has been identified beyond the advisory and standard CVE tracking sites (GitHub Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

symfony

Affected

sid

symfony: 7.4.23+dfsg-1

Fixed

trixie

symfony

Affected

Source: This report was generated using AI

Related PHP vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-122053MEDIUM6.9
  • PHP logoPHP
  • symfony/serializer
NoYesNov 06, 2026
GHSA-526c-px8p-72x8MEDIUM4.3
  • PHP logoPHP
  • spomky-labs/otphp
NoYesNov 07, 2026
CVE-2026-123824LOW2.3
  • PHP logoPHP
  • symfony/config
NoYesNov 06, 2026
GHSA-h38w-h2gf-6qv2LOWN/A
  • PHP logoPHP
  • spomky-labs/otphp
NoYesNov 07, 2026
GHSA-4v5c-4hwq-6f6mMEDIUMN/A
  • PHP logoPHP
  • spomky-labs/otphp
NoYesNov 07, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management