OWASP defines "evil regex" (here) as follows:
Evil Regexes A Regex is called "evil" if it can stuck on crafted input. Evil Regex pattern contains: Grouping with repetition Inside the repeated group: Repetition Alternation with overlapping
Examples of Evil Patterns: (a+)+ ([a-zA-Z]+)* (a|aa)+ (a|a?)+ (.*a){x} | for x > 10
From the perspective of development and pentesting, I'd like to know if this is a complete characterization of "evil regex", or whether other forms exist?
Also, is there are any algorithm or method for constructing an input for a vulnerable regex that may cause it to "hang" arbitrarily long?