path-to-regexp vulnerable to Regular Expression Denial of Service via multiple route parameters
High severity
GitHub Reviewed
Published
Mar 26, 2026
in
pillarjs/path-to-regexp
•
Updated Mar 27, 2026
Description
Published by the National Vulnerability Database
Mar 26, 2026
Published to the GitHub Advisory Database
Mar 27, 2026
Reviewed
Mar 27, 2026
Last updated
Mar 27, 2026
Impact
A bad regular expression is generated any time you have three or more parameters within a single segment, separated by something that is not a period (
.). For example,/:a-:b-:cor/:a-:b-:c-:d. The backtrack protection added inpath-to-regexp@0.1.12only prevents ambiguity for two parameters. With three or more, the generated lookahead does not block single separator characters, so capture groups overlap and cause catastrophic backtracking.Patches
Upgrade to path-to-regexp@0.1.13
Custom regex patterns in route definitions (e.g.,
/:a-:b([^-/]+)-:c([^-/]+)) are not affected because they override the default capture group.Workarounds
All versions can be patched by providing a custom regular expression for parameters after the first in a single segment. As long as the custom regular expression does not match the text before the parameter, you will be safe. For example, change
/:a-:b-:cto/:a-:b([^-/]+)-:c([^-/]+).If paths cannot be rewritten and versions cannot be upgraded, another alternative is to limit the URL length.
References
References