Read the docs
TI-2026-85989 Aliases CVE-2026-118515

Symfony Serializer lets clients turn server files into uploads

Priority LOW 37CWE-73Published · Updated

Key facts

Attack vector
Network
Privileges required
None
User interaction
None
Attack complexity
Low
Attack requirements
Present
Impact type
—
Confidentiality · integrity · availability
High · Low · High
Fix status
Fixed

Attack profile from CVSS 4.0 · CNA. Fix status from CNA.

Summary

Symfony versions before 5.4.56, from 6.0.0 before 6.4.50, from 7.0.0 before 7.4.23 and from 8.0.0 before 8.1.11 build UploadedFile objects from request data through the Serializer, so a client can choose the file path. An attacker can name any server file in a request body, and the application then treats that file as an upload even though it was never sent (CWE-73). An unauthenticated remote attacker needs only one request with a JSON or form body. Depending on what the application does with the upload, this can expose readable files or move them when move() runs.

Written with Claude Haiku 5.5 from the sources below · 2026-11-06

Description from the CNA

The Symfony Serializer component DataUriNormalizer handles only the exact types SplFileInfo, SplFileObject, and File, so for a property typed with a subclass such as UploadedFile, ObjectNormalizer instantiates the object through its constructor from attacker-controlled data, including the file path. This allows an arbitrary file on the server to be treated as an uploaded file 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 request body such as {"image": {"path": "/path/to/project/.env.local", "originalName": "a.png", "test": true}} makes the application handle any file on the server as an upload, without the file being sent. With test: true, UploadedFile::isValid() skips is_uploaded_file() and move() falls back to rename(). Assert\File does not prevent this because it validates the file at the attacker-chosen path, which exists on the server. Any code that deserializes untrusted data into a type that holds such a property is affected. That includes #[MapRequestPayload] on a DTO with an UploadedFile property, which is how uploads are mapped in Symfony 8.1; a single unauthenticated request with a JSON or form body is enough. Depending on what the application does with the upload, this can expose any file readable by PHP (for instance, when uploads are stored and served back), move any such file when move() is called, and reveal whether a path exists. A serializer built without DataUriNormalizer ahead of the object normalizer is not protected by the fix; the serializer configured by FrameworkBundle is.

Why it matters now

EPSS 0.00581 47th percentileScored 2026-11-07
Fix Fixed No fixed version in the sources yet

SSVC decision points

Not available: CISA has not published SSVC decision points for this record.

Affected products

No affected products listed by the sources yet.

Remediation

Upgrade Symfony to 5.4.56, 6.4.50, 7.4.23 or 8.1.11, matching your release line. A serializer built without DataUriNormalizer ahead of the object normalizer is not protected by the fix, while the serializer configured by FrameworkBundle is.

Written with Claude Haiku 5.5 from the sources below · 2026-11-06

Fixed in the same release

Records fixed by the same vendor advisory or release, as the CNA lists them.

  • Release ·

    sensiolabs symfony 5.4.56, 6.4.50 and 2 more versions

    6 records Highest priority Priority LOW 6 LOW

    Other records, highest priority first

    • TI-2026-85971 Symfony YAML parser inefficient parsing enables denial of servicePriority LOW 38
    • TI-2026-85987 Symfony DataUriNormalizer reads local files from uppercase data URIsPriority LOW 36
    • TI-2026-86046 XML external entity injection in Symfony Config componentPriority LOW 12

Timeline

  1. 2026-11-06 Threatist record created from CVE-2026-118515
  2. 2026-11-08 Priority changed: MEDIUM → LOW

References

  • TI-2019-13616 An issue was discovered in Symfony 3.4.0 through 3.4.34, 4.2.0 through 4.2.11, and 4.3.0… CVSS 3.1CRITICAL 9.8
  • TI-2018-10604 An issue was discovered in Http Foundation in Symfony 2.7.0 through 2.7.48, 2.8.0 through… CVSS 3.1MEDIUM 6.5
  • TI-2019-08131 In Symfony before 2.7.51, 2.8.x before 2.8.50, 3.x before 3.4.26, 4.x before 4.1.12, and… CVSS 3.1CRITICAL 9.8
  • TI-2016-02159 Symfony before 2.8.6 and 3.x before 3.0.6 allows remote attackers to bypass… CVSS 3.0CRITICAL 9.8
  • TI-2019-08459 An issue was discovered in Symfony before 4.2.12 and 4.3.x before 4.3.8. CVSS 3.1CRITICAL 9.8
  • TI-2018-08136 An issue was discovered in the Ldap component in Symfony 2.8.x before 2.8.37, 3.3.x… CVSS 3.0CRITICAL 9.8
See all 107 →

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences