Skip to main content

Symfony JsonPath CVE-2026-45756

LOW
Uncontrolled Resource Consumption (CWE-400)
2026-05-28 https://github.com/symfony/symfony GHSA-8v8v-g73j-492j

Lifecycle Timeline

2
Source Code Evidence Fetched
May 28, 2026 - 18:01 vuln.today
Analysis Generated
May 28, 2026 - 18:01 vuln.today

DescriptionNVD

Description

The JsonPath component's match() and search() filter functions compile a caller-supplied pattern straight into preg_match():

php
'match'  => @preg_match(\sprintf('/^%s$/u', $this->transformJsonPathRegex($argList[1])), $value),
'search' => @preg_match("/{$this->transformJsonPathRegex($argList[1])}/u", $value),

transformJsonPathRegex() only performs cosmetic escaping: there is no length cap, no restriction to the RFC 9485 i-regexp subset, and no bound on backtracking. An application that evaluates an attacker-influenced JSONPath expression server-side (e.g. one taken from a query parameter or API field and passed to JsonCrawler) can therefore be made to run a catastrophic-backtracking pattern such as $[?search(@, "(a+)+$")]. Evaluated against a moderately sized document, this pins a CPU core for seconds per request, so a handful of concurrent requests exhausts the worker pool: a denial of service. Because the preg_match() calls are prefixed with @, the PCRE backtrack-limit errors that would otherwise surface are suppressed, leaving no log trace.

Conditions for exploitation

An application that evaluates an attacker-influenced JSONPath expression containing a match() / search() filter against any non-trivial JSON input.

Resolution

JsonCrawler runs the preg_match() calls through a helper that lowers pcre.backtrack_limit to 10000 for the duration of the call (restoring the previous value afterwards), so a pathological pattern fails fast instead of stalling the worker.

The patch for this issue is available here for branch 7.4.

Credits

Symfony would like to thank Himanshu Anand for reporting the issue and Alexandre Daubois for providing the fix.

AnalysisAI

Uncontrolled PCRE backtracking in Symfony's JsonPath component allows denial of service when attacker-influenced JSONPath expressions containing match() or search() filters are evaluated server-side. Affected applications that pass user-supplied JSONPath queries to JsonCrawler::find() can be made to execute catastrophically backtracking patterns such as '(a+)+$', pinning a CPU core for several seconds per request; a small number of concurrent requests can exhaust the entire PHP worker pool. …

Sign in for full analysis, threat intelligence, and remediation guidance.

Share

CVE-2026-45756 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy