{"id":"GHSA-8v8v-g73j-492j","aliases":["CVE-2026-45756"],"title":"Symfony's JsonPath Evaluates Attacker-Controlled Regular Expressions in match()/search() Without Limits — ReDoS","titleSource":"OSV","descriptionSource":"OSV","declaredSeverity":"LOW","description":"### Description\n\nThe `JsonPath` component's `match()` and `search()` filter functions compile a caller-supplied pattern straight into `preg_match()`:\n\n```php\n'match'  => @preg_match(\\sprintf('/^%s$/u', $this->transformJsonPathRegex($argList[1])), $value),\n'search' => @preg_match(\"/{$this->transformJsonPathRegex($argList[1])}/u\", $value),\n```\n\n`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.\n\n### Conditions for exploitation\n\nAn application that evaluates an attacker-influenced JSONPath expression containing a `match()` / `search()` filter against any non-trivial JSON input.\n\n### Resolution\n\n`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.\n\nThe patch for this issue is available [here](https://github.com/symfony/symfony/commit/1ac2d47418ec23066112db1e6ca35be6fe123d14) for branch 7.4.\n\n### Credits\n\nSymfony would like to thank Himanshu Anand for reporting the issue and Alexandre Daubois for providing the fix.","severity":"low","score":2.7,"published":"2026-05-28T17:34:55.000Z","modified":"2026-09-10T03:50:46.368Z","withdrawn":false,"knownExploited":false,"affected":[{"ecosystem":"Packagist","name":"symfony/json-path","sources":[{"name":"OSV · GHSA-8v8v-g73j-492j","url":"https://osv.dev/vulnerability/GHSA-8v8v-g73j-492j"}],"ranges":[{"events":[{"introduced":"7.3.0"},{"fixed":"7.4.12"}],"type":"ECOSYSTEM"}],"versions":["v7.3.0","v7.3.1","v7.3.10","v7.3.2","v7.3.4","v7.3.5","v7.3.8","v7.3.9","v7.4.0","v7.4.0-BETA1","v7.4.0-RC1","v7.4.1","v7.4.3","v7.4.4","v7.4.8"],"fixed":["7.4.12"]},{"ecosystem":"Packagist","name":"symfony/json-path","sources":[{"name":"OSV · GHSA-8v8v-g73j-492j","url":"https://osv.dev/vulnerability/GHSA-8v8v-g73j-492j"}],"ranges":[{"events":[{"introduced":"8.0.0"},{"fixed":"8.0.12"}],"type":"ECOSYSTEM"}],"versions":["v8.0.0","v8.0.1","v8.0.3","v8.0.4","v8.0.8"],"fixed":["8.0.12"]},{"ecosystem":"Packagist","name":"symfony/symfony","sources":[{"name":"OSV · GHSA-8v8v-g73j-492j","url":"https://osv.dev/vulnerability/GHSA-8v8v-g73j-492j"}],"ranges":[{"events":[{"introduced":"7.3.0"},{"fixed":"7.4.12"}],"type":"ECOSYSTEM"}],"versions":["v7.3.0","v7.3.1","v7.3.10","v7.3.11","v7.3.2","v7.3.3","v7.3.4","v7.3.5","v7.3.6","v7.3.7","v7.3.8","v7.3.9","v7.4.0","v7.4.0-BETA1","v7.4.0-BETA2","v7.4.0-RC1","v7.4.0-RC2","v7.4.0-RC3","v7.4.1","v7.4.10","v7.4.11","v7.4.2","v7.4.3","v7.4.4","v7.4.5","v7.4.6","v7.4.7","v7.4.8","v7.4.9"],"fixed":["7.4.12"]},{"ecosystem":"Packagist","name":"symfony/symfony","sources":[{"name":"OSV · GHSA-8v8v-g73j-492j","url":"https://osv.dev/vulnerability/GHSA-8v8v-g73j-492j"}],"ranges":[{"events":[{"introduced":"8.0.0"},{"fixed":"8.0.12"}],"type":"ECOSYSTEM"}],"versions":["v8.0.0","v8.0.1","v8.0.10","v8.0.11","v8.0.2","v8.0.3","v8.0.4","v8.0.5","v8.0.6","v8.0.7","v8.0.8","v8.0.9"],"fixed":["8.0.12"]}],"sourceAffected":[],"references":["https://github.com/symfony/symfony/security/advisories/GHSA-8v8v-g73j-492j","https://github.com/symfony/symfony/commit/1ac2d47418ec23066112db1e6ca35be6fe123d14","https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/json-path/CVE-2026-45756.yaml","https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/symfony/CVE-2026-45756.yaml","https://github.com/symfony/symfony","https://symfony.com/cve-2026-45756"],"sources":[{"name":"OSV","id":"GHSA-8v8v-g73j-492j","modified":"2026-09-10T03:50:46.368154289Z","url":"https://osv.dev/vulnerability/GHSA-8v8v-g73j-492j"}],"assessments":[{"source":"OSV","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:U","score":2.7}],"products":[],"remediation":[],"kev":{"status":"not-listed","checkedAt":"2026-10-28T23:25:34.350Z"},"coverage":[{"source":"NVD","status":"not-checked"},{"source":"GHSA","status":"not-checked"},{"source":"EUVD","status":"not-checked"},{"source":"EPSS","status":"not-checked"}],"evidence":[]}