Regular expression Denial of Service - ReDoS
Last updated
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Un Denial of Service da espressione regolare (ReDoS) si verifica quando qualcuno sfrutta le debolezze nel modo in cui funzionano le espressioni regolari (un modo per cercare e abbinare modelli nel testo). A volte, quando vengono utilizzate le espressioni regolari, possono diventare molto lente, specialmente se il pezzo di testo con cui stanno lavorando diventa più grande. Questa lentezza può diventare così grave che cresce molto rapidamente anche con piccoli aumenti nella dimensione del testo. Gli attaccanti possono utilizzare questo problema per far smettere di funzionare correttamente un programma che utilizza espressioni regolari per un lungo periodo di tempo.
Controlla i dettagli in https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Un modello di espressione regolare malvagio è quello che può bloccarsi su input creati causando un DoS. I modelli di regex malvagi contengono tipicamente raggruppamenti con ripetizione e ripetizione o alternanza con sovrapposizioni all'interno del gruppo ripetuto. Alcuni esempi di modelli malvagi includono:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} per x > 10
Tutti questi sono vulnerabili all'input aaaaaaaaaaaaaaaaaaaaaaaa!
.
In un CTF (o bug bounty) potresti controllare la regex con cui viene abbinata un'informazione sensibile (il flag). Quindi, potrebbe essere utile far congelare la pagina (timeout o tempo di elaborazione più lungo) se la regex ha corrisposto e non se non lo ha fatto. In questo modo sarai in grado di esfiltrare la stringa carattere per carattere:
In questo post puoi trovare questa regola ReDoS: ^(?=<flag>)((.*)*)*salt$
Esempio: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
In questo writeup puoi trovare questo: <flag>(((((((.*)*)*)*)*)*)*)!
In questo writeup ha usato: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
I seguenti sono esempi di ReDoS in cui controlli sia l'input che la regex:
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)