CVE-2026-27206
PHP vulnerability analysis and mitigation

Overview

CVE-2026-27206 is a PHP Object Injection vulnerability in the zumba/json-serializer library (Composer package) caused by unrestricted deserialization via the @type field in JsonSerializer::unserialize(). It affects all versions prior to 3.2.3 and was disclosed on February 19, 2026, with the patch released the same day. The vulnerability carries a CVSS v3.1 base score of 8.1 (High) (GitHub Advisory, Security Advisory).

Technical details

The root cause is CWE-502 (Deserialization of Untrusted Data): the library's JsonSerializer::unserialize() method reads a special @type field from JSON input and instantiates the named PHP class without any restriction on which classes are permitted. An attacker who controls the JSON payload can specify any class available in the application's autoloader, including those with dangerous magic methods such as __wakeup() or __destruct(). If the application or its dependencies contain exploitable gadget chains, this can escalate to Remote Code Execution (RCE) — a risk profile analogous to PHP's native unserialize() called without the allowed_classes restriction. Exploitation requires that attacker-controlled JSON reaches JsonSerializer::unserialize() and that a usable gadget chain exists in the application's class hierarchy (GitHub Advisory, Security Advisory).

Impact

Successful exploitation can result in arbitrary code execution, data exfiltration, file manipulation, and denial of service, depending on the gadget chains available in the target application. Confidentiality, integrity, and availability are all rated High. Applications that only deserialize internally generated, trusted JSON are not affected; the risk is limited to deployments that pass user-supplied or third-party JSON directly into JsonSerializer::unserialize() (GitHub Advisory).

Exploitability

No public proof-of-concept exploit or evidence of in-the-wild exploitation has been reported as of the time of disclosure (GitHub Advisory). The EPSS score is approximately 0.39% (0.003880), placing it in the 34th percentile for exploitation likelihood within 30 days. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation complexity is rated High because a usable gadget chain must exist in the target application's dependencies, limiting the pool of exploitable targets.

Exploitation steps

  1. Reconnaissance: Identify PHP applications using zumba/json-serializer versions below 3.2.3 (e.g., via composer.lock exposure, package metadata, or dependency scanning tools like Composer Audit).
  2. Identify input vector: Locate an application endpoint that accepts JSON input and passes it directly to JsonSerializer::unserialize() — such as an API endpoint, cookie value, or deserialized session data.
  3. Enumerate gadget chains: Analyze the application's dependencies (e.g., using tools like PHPGGC) to identify classes with exploitable __wakeup(), __destruct(), or __toString() magic methods that can be chained to achieve code execution or other malicious effects.
  4. Craft malicious payload: Construct a JSON payload with the @type field set to the target gadget class and populate its properties to trigger the desired behavior upon instantiation, for example:
    {"@type": "VulnerableGadgetClass", "command": "id"}
  5. Submit payload: Send the crafted JSON to the vulnerable endpoint via HTTP request, cookie injection, or any other input channel that feeds into JsonSerializer::unserialize().
  6. Trigger magic methods: Upon deserialization, the library instantiates the specified class, invoking __wakeup() or __destruct() with attacker-controlled property values, potentially achieving RCE, file write, or data exfiltration (GitHub Advisory, Security Advisory).

Indicators of compromise

  • Logs: Unexpected PHP exceptions or errors referencing class instantiation from unusual class names in application logs; error log entries mentioning JsonSerializerException with unknown class names (may indicate probing attempts).
  • Network: HTTP requests containing JSON bodies with an @type field specifying non-standard or unexpected class names; anomalous outbound connections from the PHP application server following deserialization events.
  • File System: Unexpected new files (web shells, scripts) written to the application directory or /tmp; modification timestamps on PHP files inconsistent with deployment history.
  • Process: Unusual child processes spawned by the PHP-FPM or web server process (e.g., bash, curl, wget, python, nc); unexpected cron jobs or scheduled tasks created under the web server user account.

Mitigation and workarounds

Upgrade zumba/json-serializer to version 3.2.3 or later, which introduces the setAllowedClasses(?array $allowedClasses) method to restrict which classes may be instantiated during deserialization (Release 3.2.3). After upgrading, configure an explicit allowlist: use $serializer->setAllowedClasses([]) to block all class instantiation, or provide a strict list of trusted classes. If immediate upgrade is not feasible, ensure JsonSerializer::unserialize() is never called on untrusted or attacker-controlled JSON, and validate/sanitize all JSON input before deserialization (Security Advisory).

Community reactions

The vulnerability was reported by security researcher TheDeepOpc and remediated by maintainers jrbasso and cjsaylor, with the patch released on the same day as disclosure (February 19, 2026) (Release 3.2.3). Community coverage appeared on dev.to and security aggregators shortly after disclosure, with posts noting the similarity to PHP's native unserialize() risk. Social media mentions were observed on Mastodon and Bluesky via TheHackerWire. Overall community sentiment treated this as a moderate-severity supply chain concern requiring prompt patching for applications handling untrusted JSON.

Additional resources


SourceThis report was generated using AI

Related PHP vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-52777CRITICAL9.4
  • PHP logoPHP
  • yeswiki/yeswiki
NoYesSep 05, 2026
CVE-2026-52775HIGH8.8
  • PHP logoPHP
  • yeswiki/yeswiki
NoYesSep 05, 2026
CVE-2026-52774MEDIUM6.1
  • PHP logoPHP
  • yeswiki/yeswiki
NoYesSep 05, 2026
CVE-2026-52773MEDIUM6.1
  • PHP logoPHP
  • yeswiki/yeswiki
NoYesSep 05, 2026
CVE-2026-52772MEDIUM5.5
  • PHP logoPHP
  • yeswiki/yeswiki
NoYesSep 05, 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

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