CVE-2026-121623
Symfony: DataUriNormalizer Opens Data URIs With a Non-Lowercase Scheme as Local Files, Letting a Client Read Any Server File
The Symfony Serializer component DataUriNormalizer::denormalize() matches the data: scheme with a case-sensitive regular expression, allowing a value with an uppercase scheme, such as DATA:,/../../../etc/passwd, to bypass it, resulting in Arbitrary Local File Read through Path Traversal in Symfony versions prior to 5.4.56, 6.x prior to 6.4.50, 7.x prior to 7.4.23, and 8.x prior to 8.1.11. A value whose scheme is not lowercase data: are treated as a local file path and opened instead of being decoded as inline data, so the resulting File, \SplFileInfo, or \SplFileObject points at a file on the server, which the application then handles as the uploaded content. Any endpoint that deserializes untrusted input into one of these types is affected. FrameworkBundle registers DataUriNormalizer ahead of ObjectNormalizer by default. A single request with a crafted DATA: value is enough to read arbitrary local files that the application can access, with no authentication needed if the endpoint is public.
Fixes and workarounds
Fix
The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches.
Source: CNA: CheckmarxAffected products and versions
| Product | Versions | Authority |
|---|---|---|
| symfony sensiolabs symfony/serializer
https://packagist.org/packages/symfony/serializer |
≥ 0; < 5.4.56 (affected, git) ≥ 6.0.0; < 6.4.50 (affected, git) ≥ 7.0.0; < 7.4.23 (affected, git) ≥ 8.0.0; < 8.1.11 (affected, git) Other versions: unaffected |
CNA: Checkmarx |
Version ranges are source assertions. Check the vendor advisory and your installed configuration before determining exposure.
CVSS assessments
| Version / score | Vector | Authority |
|---|---|---|
| 4.0 / 8.2 high |
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N | CNA: Checkmarx |
| 4.0 / 8.2 high |
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X | NVD: 596c5446-0ce5-4ba2-aa66-48b3b757a647 |
Exploit evidence
No exploit evidence in collected sources. This is not proof of no exploitation.
References
- https://github.com/symfony/symfony/security/advisories/GHSA-pxj9-jh84-vhm5CNA: Checkmarx · third-party-advisory
- https://github.com/symfony/symfony/commit/a0c551861ac23f888dfe6d1157ca78f4e220f3b7CNA: Checkmarx · patch
- https://github.com/symfony/symfony/commit/a0c551861ac23f888dfe6d1157ca78f4e220f3b7596c5446-0ce5-4ba2-aa66-48b3b757a647
- https://github.com/symfony/symfony/security/advisories/GHSA-pxj9-jh84-vhm5596c5446-0ce5-4ba2-aa66-48b3b757a647
For agents and automation
Read public disclosures for free as Markdown or JSON. Compatible browsers also expose native WebMCP tools to search disclosures, read this page, and discover API access.
Use the ontology-linked Cyber API with x402 pay per request, or a Y2 Pro or Elite API key with the intel:cyber scope.
Endpoints and access details
https://api.y2.dev/api/v2/cyber/cveshttps://api.y2.dev/api/v2/cyber/cves/{cveId}
A workspace owner or admin can create a Pro or Elite API key. Send Authorization: Bearer <Y2_API_KEY> from your trusted agent runtime.
For x402, omit Authorization and read the HTTP 402 payment challenge before signing a retry. Public browser tools do not make payments.