RegExp DoS


Le espressioni regolari sono delle particolari sintassi che permettono di rappresentare dei "linguaggi" che rispettano una particolare grammatica (detta appunto grammatica regolare). L'appartenenza di un linguaggio ad una grammatica regolare viene determinata attraverso un automa a stati finiti (NFA e DFA). In particolari casi, ossia con particolari stringhe da processare, il numero possibile di percorsi nell'automa cresce esponenzialmente e questo può portare ad un DoS del sistema.




Quindi una tecnica di injection che non punta ad un buffer overflow o ad una SQL Injection, ma che forza il processore di espressioni regolari ad intraprendere delle politiche di parsing troppo onerose. E questo succede perché i parser sono progettati senza la sicurezza in mente. Siamo alle solite insomma!

Qualche esempio:

–Person Name
•Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$
•Payload: “aaaaaaaaaaaaaaaaaaaaaaaaaaaa!”
–Java Classname
•Regex: ^(([a-z])+.)+[A-Z]([a-z])+$
•Payload: “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!”

Se voleste fare qualche test considerate che mentre nel caso di SQL Injection o Buffer Overflow potete fermarvi in tempo (pur avendo sconfinato nell'illegalità), nel caso di attacchi DoS potreste provocare dei danni seri alla continuità del sistema sin da subito, richiedendo un restart del sistema e provocando un certo tempo di inattività (e quindi €€€). E non pensiate che è così raro "Dossare" un sistema: basta trovare un sysadmin un po' troppo parco di risorse :-)

Attacco originale comunque, non c'è che dire!

Commenti

Post popolari in questo blog

Exploit: icsploit o espluà?

TrueCrypt 5.0: nuova release

ING Direct: ancora con il PAD numerico rotante!