CVE-2026-108082: ReDoS in HeaderUtils::split() Reachable Through the Cache-Control Request Header

Published Sep 15, 2026
·
Updated

Description

HeaderUtils::split() parsed header values with a pattern whose token alternative also matched whitespace, followed by a (?<!\s) lookbehind. A run of whitespace placed before a separator could be divided among the iterations of the enclosing repetition in exponentially many ways, and the engine tried all of them before settling. HeaderBag calls it for the Cache-Control header whenever a Request is built, so any application handling HTTP requests is reachable, with no authentication.

A single request carrying such a header costs close to a second of CPU (813 ms for a run of 17 spaces in an 8 KB header on PHP 8.5, doubling with each extra space). From 18 spaces on, pregmatchall() gives up at pcre.backtracklimit and split() returns an empty array, so every directive of the header is silently dropped.

Resolution

The pattern now consumes whitespace only when more of the value follows it, so a value can no longer end on whitespace, nothing has to be given back, and every quantifier is possessive. The first release of this fix broke splitting on a whitespace separator: HeaderUtils::split('foo bar', ' ') returned a single value in 6.4.46 to 6.4.47, 7.4.19 to 7.4.20 and 8.1.7 to 8.1.8. Whitespace characters used as separators are now left out of the whitespace branch, which 6.4.48, 7.4.21 and 8.1.9 contain.

The patches for this issue are available here for branch 5.4 (and forward-ported to 6.4, 7.4, 8.1 and 8.2).

Credits

Symfony would like to thank r3verii for reporting the issue and Nicolas Grekas for providing the fix.

Symfony would also like to thank Bruno Dias from Checkmarx for his help getting a CVE assigned.

Other sources

CVE-2026-108082: ReDoS in HeaderUtils::split() Reachable Through the Cache-Control Request Header

— Packagist

Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to versions 5.4.54, 6.4.46, 7.4.19, and 8.1.7, HeaderUtils::split() parsed header values with a pattern whose token alternative also matched whitespace, followed by a (?<!\s) lookbehind. A run of whitespace placed before a separator could be divided among the iterations of the enclosing repetition in exponentially many ways, and the engine tried all of them before settling. HeaderBag calls it for the Cache-Control header whenever a Request is built, so any application handling HTTP requests is reachable, with no authentication. A single request carrying such a header costs close to a second of CPU (813 ms for a run of 17 spaces in an 8 KB header on PHP 8.5, doubling with each extra space). From 18 spaces on, pregmatchall() gives up at pcre.backtracklimit and split() returns an empty array, so every directive of the header is silently dropped. This issue affects symfony/http-foundation v4.1.0-BETA1 through v5.4.53, v6.0.0-BETA1 through v6.4.45, v7.0.0-BETA1 through v7.4.18, and v8.0.0-BETA1 through v8.1.6.

— Ubuntu

Affected Software

46 affected componentsFixes available
packagist/symfony/http-foundation>=4.1.0-BETA1<=5.4.53, >=6.0.0-BETA1<=6.4.45, >=7.0.0-BETA1<=7.4.18, >=8.0.0-BETA1<=8.1.6
composer/symfony/symfony>=4.1.0<5.4.54
5.4.54
composer/symfony/http-foundation>=4.1.0<5.4.54
5.4.54
composer/symfony/symfony>=8.0.0<8.1.7
8.1.7
composer/symfony/symfony>=7.0.0<7.4.19
7.4.19
composer/symfony/symfony>=6.0.1<6.4.46
6.4.46
composer/symfony/http-foundation>=8.0.0<8.1.7
8.1.7
composer/symfony/http-foundation>=7.0.0<7.4.19
7.4.19
composer/symfony/http-foundation>=6.0.1<6.4.46
6.4.46
composer/symfony/http-foundation>=5.4.1, <5.4.54
5.4.54
composer/symfony/http-foundation>=6.0.1, <6.1.0
composer/symfony/http-foundation>=6.1.0, <6.2.0
composer/symfony/http-foundation>=6.2.0, <6.3.0
composer/symfony/http-foundation>=6.3.0, <6.4.0
composer/symfony/http-foundation>=6.4.0, <6.4.46
6.4.46
composer/symfony/http-foundation>=7.0.0, <7.1.0
composer/symfony/http-foundation>=7.1.0, <7.2.0
composer/symfony/http-foundation>=7.2.0, <7.3.0
composer/symfony/http-foundation>=7.3.0, <7.4.0
composer/symfony/http-foundation>=7.4.0, <7.4.19
7.4.19
composer/symfony/http-foundation>=8.0.0, <8.1.0
composer/symfony/http-foundation>=8.1.0, <8.1.7
8.1.7
composer/symfony/symfony>=5.4.1, <5.4.54
5.4.54
composer/symfony/symfony>=6.0.1, <6.1.0
composer/symfony/symfony>=6.1.0, <6.2.0
composer/symfony/symfony>=6.2.0, <6.3.0
composer/symfony/symfony>=6.3.0, <6.4.0
composer/symfony/symfony>=6.4.0, <6.4.46
6.4.46
composer/symfony/symfony>=7.0.0, <7.1.0
composer/symfony/symfony>=7.1.0, <7.2.0
composer/symfony/symfony>=7.2.0, <7.3.0
composer/symfony/symfony>=7.3.0, <7.4.0
composer/symfony/symfony>=7.4.0, <7.4.19
7.4.19
composer/symfony/symfony>=8.0.0, <8.1.0
composer/symfony/symfony>=8.1.0, <8.1.7
8.1.7
ubuntu/symfony*
ubuntu/symfony*
ubuntu/symfony*
ubuntu/symfony*
ubuntu/symfony*
ubuntu/symfony*
ubuntu/symfony*
debian/symfony*
debian/symfony<6.4.49+dfsg-0+deb13u1
6.4.49+dfsg-0+deb13u1
debian/symfony<7.4.19+dfsg-1
7.4.19+dfsg-1
debian/symfony<=5.4.53+dfsg-0+deb12u1, <=6.4.41+dfsg-0+deb13u1
6.4.49+dfsg-0+deb13u17.4.22+dfsg-17.4.23+dfsg-1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade composer/symfony/symfony to a version that resolves this vulnerability.

    Fixed in 5.4.54
  2. Upgrade

    Upgrade composer/symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 5.4.54
  3. Upgrade

    Upgrade composer/symfony/symfony to a version that resolves this vulnerability.

    Fixed in 8.1.7
  4. Upgrade

    Upgrade composer/symfony/symfony to a version that resolves this vulnerability.

    Fixed in 7.4.19
  5. Upgrade

    Upgrade composer/symfony/symfony to a version that resolves this vulnerability.

    Fixed in 6.4.46
  6. Upgrade

    Upgrade composer/symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 8.1.7
  7. Upgrade

    Upgrade composer/symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 7.4.19
  8. Upgrade

    Upgrade composer/symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 6.4.46
  9. Upgrade

    Upgrade debian/symfony to a version that resolves this vulnerability.

    Fixed in 6.4.49+dfsg-0+deb13u1
  10. Upgrade

    Upgrade debian/symfony to a version that resolves this vulnerability.

    Fixed in 7.4.19+dfsg-1
  11. Upgrade

    Upgrade debian/symfony to a version that resolves this vulnerability.

    Fixed in 6.4.49+dfsg-0+deb13u1Fixed in 7.4.22+dfsg-1Fixed in 7.4.23+dfsg-1
  12. Upgrade

    Upgrade symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 5.4.54
  13. Upgrade

    Upgrade symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 6.4.48
  14. Upgrade

    Upgrade symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 7.4.21
  15. Upgrade

    Upgrade symfony/http-foundation to a version that resolves this vulnerability.

    Fixed in 8.1.9

Event History

Sep 15, 2026
Advisory Published
via Packagist·08:00 AM
Data Sourced
via Packagist·08:00 AM
DescriptionSeverityAffected Software
Oct 15, 2026
CVE Published
via Ubuntu·12:00 AM
Data Sourced
via Ubuntu·12:00 AM
RemedyDescriptionSeverityAffected Software
CVE Published
via MITRE·02:46 PM
Data Sourced
via MITRE·02:46 PM
DescriptionWeakness
Data Sourced
via OSV·03:17 PM
DescriptionSeverityAffected Software
Data Sourced
via NVD·03:17 PM
DescriptionSeverityWeakness
Oct 27, 2026
Advisory Published
via GitHub·07:01 PM
Data Sourced
via GitHub·07:01 PM
DescriptionWeaknessAffected Software

Parent advisories

This vulnerability appears in the following advisories.

Frequently Asked Questions

1

Which deployments are exposed to unauthenticated exploitation?

Any application using an affected symfony/http-foundation version that handles HTTP requests is reachable. HeaderBag processes the Cache-Control header when a Request is built, so an attacker does not need authentication.

2

What request content triggers the excessive CPU use?

A Cache-Control header containing a run of whitespace immediately before a separator triggers the problematic parsing behavior. In the described test, 17 spaces in an 8 KB header consumed about 813 ms of CPU on PHP 8.5, with cost doubling for each additional space.

3

Can this issue also alter Cache-Control processing rather than only consume CPU?

Yes. At 18 spaces or more, preg_match_all() reaches pcre.backtrack_limit and HeaderUtils::split() returns an empty array, silently dropping every Cache-Control directive in that header.

4

Which versions contain the fix?

Upgrade symfony/http-foundation to 5.4.54, 6.4.46, 7.4.19, or 8.1.7 or later in the corresponding release line. Affected ranges begin at 4.1.0-BETA1, 6.0.0-BETA1, 7.0.0-BETA1, and 8.0.0-BETA1 respectively.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203