Skip to content
Vulnerabilities

Stop PHP Crashes: Patch Symfony Expression Language CVE-2026-109449 Now

Unpatched Symfony versions crash PHP processes when parsing deeply nested expressions, exposing user-facing apps to denial-of-service attacks.

Illustration: A chaotic tangle of tangled wires spills out from an open laptop, forming a dense, knotted web that completely engulfs the keyboard and screen.
AI-generated illustration: BlueTeam Herald

Key points

  • CVE-2026-109449 allows remote attackers to crash PHP processes via crafted expressions.
  • The flaw affects Symfony Expression Language versions prior to 5.4.54, 6.4.48, 7.4.21, and 8.1.9.
  • No fix has been confirmed for versions outside the listed update boundaries; upgrade immediately if exposed.

The risk

Symfony Expression Language contains a parser flaw that enables remote attackers to crash PHP processes through resource exhaustion. The vulnerability, tracked as CVE-2026-109449, carries a CVSS score of 8.7, classified as high severity. According to the NVD record, the parser builds node trees without enforcing depth limits. An expression containing tens of thousands of nested unary operators, array literals, binary operators, or property accesses triggers the crash while the tree is freed. This mechanism allows a single request to terminate the hosting process, effectively creating a denial-of-service condition.

Who is exposed

Applications using the Symfony Expression Language component in versions prior to 5.4.54, 6.4.48, 7.4.21, and 8.1.9 are vulnerable. The affected ranges include Symfony 5.4 through v5.4.53, version 6 from v6.0.0-BETA1 through v6.4.47, version 7 from v7.0.0-BETA1 through v7.4.20, and version 8 from v8.0.0-BETA1 through v8.1.8. Any code that parses untrusted expressions is at risk. Specifically, applications using the #[Assert\ExpressionSyntax] validator pass validated values to ExpressionLanguage::lint(), which exposes them to this crash vector if they process user-written expressions.

Cost and compliance

The primary impact of this vulnerability is availability loss through process termination. Because the flaw is triggered by a single request containing a deeply nested expression, the operational cost includes immediate service interruption and potential recovery time for the affected PHP instances. Organizations must assess whether their current Symfony versions fall within the vulnerable ranges listed by the vendor. Compliance frameworks requiring robust application security controls may view unpatched high-severity flaws as non-compliant, necessitating prompt remediation to maintain security posture.

Our take on the response

That suggests teams should prioritize upgrading the symfony/expression-language package to the latest stable release immediately. Since the vulnerability is triggered by input validation logic, verifying that user-supplied expressions are sanitized or restricted in complexity is a critical interim mitigation. Monitoring application logs for sudden PHP process exits can help identify active exploitation attempts before they cause widespread service degradation.

What defenders should look for

Teams usually detect this activity by monitoring for unexpected PHP process crashes or high memory usage spikes coinciding with specific HTTP requests. Check web server logs for requests containing unusually long or complex expression strings, particularly those with repeated operators or deep nesting. Look for application errors indicating parser failures or memory exhaustion during expression evaluation. The first containment move is to restrict input length for any fields processing expressions. Verify that application firewalls or WAFs are configured to block requests with excessive parameter complexity. Ensure logging captures the full request payload to aid in forensic analysis.

Background: Input validation

Implement strict allowlists for all external data, enforce type and length constraints, and decode inputs before validation. Reject anything that does not match the exact expected format. This prevents injection attacks and buffer overflows by ensuring only safe, predictable data enters your processing logic.

Read the full guide: Input Validation Best Practices to Stop Exploits at the Edge

What to do and how to stay safe: Symfony

  • Audit your inventory to identify all systems running vulnerable Symfony Expression Language versions.
  • Upgrade the symfony/expression-language package to version 5.4.54, 6.4.48, 7.4.21, or 8.1.9 or later.
  • Monitor PHP process logs for sudden terminations or memory errors that may indicate exploitation attempts.
  • Implement input validation rules to limit the length and complexity of user-supplied expressions.

Step-by-step guide: Unpatched Software Response: Containment, Recovery, and Prevention Steps

General security guidance from the BlueTeam Herald newsroom. It is not confirmed advice from the organisations named in this story.

Frequently asked questions

Which Symfony versions are affected by CVE-2026-109449?

Versions prior to 5.4.54, 6.4.48, 7.4.21, and 8.1.9 are affected, including specific beta ranges for versions 6, 7, and 8.

What is the CVSS score for this vulnerability?

The CVSS score is 8.7, which is classified as high severity.

How can an attacker exploit this flaw?

An attacker can send a single request containing an expression with tens of thousands of nested operators, causing the PHP process to crash.

Sources

  1. CVE Program
SymfonyCVE-2026-109449PHPExpression LanguageDenial of Service

Related stories

Patch Eclipse OpenJ9 to Stop Remote JITServer Denial of Service Attacks

Unauthenticated attackers can crash JVM processes in OpenJ9 versions before 0.63.0 by sending malformed payloads to the JITServer component.