Si, cuando las expresiones regulares(en adelante RE) no se encuentran correctamente construidas o escritas, pueden ser usadas como mecanismo para ingresar textos que generen altos consumos de procesamiento o recursos, causando denegación de servicio(DoS). Este ataque es conocido como ReDOS.

Las RE están basadas en autómatas finítos no deterministas (NFA), lo que significa que por cada estado puede haber cero, uno, dos o más transiciones correspondientes a un símbolo particular. Cada estado y símbolo de entrada pueden tener muchos estados diferentes. Los motores regulares de análisis recorrerán todos los caminos posibles hasta el final, Cada estado tiene un número de estados siguientes y, por lo tanto, el algoritmo de decisión intentará cada estado siguiente hasta que encuentre una coincidencia. Todo este proceso puede conllevar un alto consumo de recursos de procesamiento en el host o servidor que se encargue de la actividad.

A continuación se muestra la validación de una cadena de texto y tiempo de ejecución en Java:


Validación regex 8 caracteres

 


Validación regex 31 caracteres.

 

Tiempos de ejecución en los principales lenguajes de programación:


fuente: Checkmarx

 

Recomendaciones de remediación o control del ataque REDoS:
– Crear expresiones regulares lo más estrictas posibles, sin componentes adicionales no requeridos con el fin de mejorar su rendimiento y resultados.
– Establecer un intervalo de tiempo de espera máximo para la validación de expresiones regulares, de tal forma que si pasado el tiempo, no se ha resuelto la validación, se finalice evitando consumo excesivo de recursos de hardware.
– Validar el tamaño máximo de caracteres de la entrada recibida previo a la validación de la expresión regular.

Referencias:
Hanqing Wu, Liz Zhao, (2015). Web Security A WhiteHat Perspective
https://www.cvedetails.com/cve/CVE-2009-1190/

No Comment

You can post first response comment.

Leave A Comment

Please enter your name. Please enter an valid email address. Please enter message.

You may also like