Microsoft has released a Regex Fuzzer that tests a .NET regular expression for vulnerability to a form of Denial of Service attack. How does it work and how serious is the problem?
You might think regular expressions are great and entirely harmless - it's not as if they were vulnerable to anything like a SQL injection attack. However the innocent looking regular expression can be turned to a sinister purpose. If an attacker knows that input is put through a regular expression then they can arrange to send it a sequence of characters that send it into an infinite loop. The result is that your application goes into a tight loop, becomes unresponsive and used up resources i.e. a Denial of Service or DoS attack.
Of course the problem for the attacker and for you is to work out what sequence of characters, if any, will send the regular expression into a tight loop. You could play this game all day but it is easier to write an automatic testing tool and this is what the Regex Fuzzer is. You input the expression and it is tested with sets of input characters. If you test it for long enough then your confidence grows that if you can't find an effective string neither will an attacker.
It comes as something of a surprise that you can't produce a deterministic test that a regular expression won't loop, but it appears that if you allow capture groups and back tracking the computation system becomes so powerful that it is as difficult as the Turing machine halting problem - which is, of course, unsolvable.
You can download the testing tool from:
and more information is available from:
.NET Regular Expressions in depth