Regular expression Denial of Service - ReDoS
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Una Denegación de Servicio por Expresión Regular (ReDoS) ocurre cuando alguien aprovecha las debilidades en cómo funcionan las expresiones regulares (una forma de buscar y hacer coincidir patrones en texto). A veces, cuando se utilizan expresiones regulares, pueden volverse muy lentas, especialmente si el texto con el que están trabajando se vuelve más grande. Esta lentitud puede llegar a ser tan mala que crece muy rápido con incluso pequeños aumentos en el tamaño del texto. Los atacantes pueden usar este problema para hacer que un programa que utiliza expresiones regulares deje de funcionar correctamente durante mucho tiempo.
Consulta los detalles en https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Un patrón de expresión regular malicioso es aquel que puede quedarse atascado con entradas diseñadas causando un DoS. Los patrones de regex maliciosos típicamente contienen agrupaciones con repetición y repetición o alternancia con superposición dentro del grupo repetido. Algunos ejemplos de patrones maliciosos incluyen:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} para x > 10
Todos esos son vulnerables a la entrada aaaaaaaaaaaaaaaaaaaaaaaa!
.
En un CTF (o programa de recompensas por errores) tal vez controlas la Regex con la que se coincide una información sensible (la bandera). Entonces, podría ser útil hacer que la página se congele (timeout o tiempo de procesamiento más largo) si la Regex coincidió y no si no coincidió. De esta manera podrás exfiltrar la cadena caracter por caracter:
En esta publicación puedes encontrar esta regla de ReDoS: ^(?=<flag>)((.*)*)*salt$
Ejemplo: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
En este informe puedes encontrar este: <flag>(((((((.*)*)*)*)*)*)*)!
En este informe se utilizó: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Los siguientes son ejemplos de ReDoS donde controlas tanto la entrada como la regex:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)