๐ชRace conditions
Description
Originellement, la situation de concurrence (race-condition) est une situation caractรฉrisรฉe par un rรฉsultat diffรฉrent selon l'ordre dans lequel agissent les acteurs du systรจme. Le terme est plutรดt employรฉ ร propos de programmes informatiques et de systรจmes รฉlectroniques. C'est gรฉnรฉralement considรฉrรฉ comme un dรฉfaut car source de panne ou de blocage.
Une condition de concurrence se produit lorsque deux sections de code conรงues pour รชtre exรฉcutรฉ dans une mรชme sรฉquence sont exรฉcutรฉs hors sรฉquence.
La concurrence a deux types : le multitraitement et le multithreading. Le multitraitement fait rรฉfรฉrence ร l'utilisation de plusieurs unitรฉs centrales de traitement (CPU), le matรฉriel dans un ordinateur qui exรฉcute des instructions, pour effectuer des simulations calculs fastidieux. D'autre part, le multithreading est la capacitรฉ pour un seul processeur de fournir plusieurs threads ou des exรฉcutions simultanรฉes.
Organiser la sรฉquence d'exรฉcution de plusieurs threads s'appelle du scheduling. Diffรฉrents systรจmes utilisent diffรฉrents algorithmes de planification, selon leurs prioritรฉs de performance. Par exemple, certains systรจmes peuvent programmer leur tรขches en exรฉcutant d'abord les tรขches les plus prioritaires, tandis qu'un autre systรจme pourrait exรฉcuter ses tรขches en donnant du temps de calcul ร tour de rรดle, quel que soit prioritรฉ.
Cette planification flexible est prรฉcisรฉment ce qui provoque des conditions de concurrence. Elles se produisent lorsque les dรฉveloppeurs n'adhรจrent pas ร certains principes de concurrence.
Exploitation
Trouver des fonctionnalitรฉes souvent sensibles aux race conditions
Parmis les fonctionnalitรฉes qu'on retrouve souvent dans ce type d'attaques on trouve:
Les fonctionnalitรฉes de contrรดle d'accรจs
Les fonctionnalitรฉes effectuant des dรฉcomptes ou touchant plus vagement ร des chiffres/nombres (votes, scores, transferts d'argent, montants de cartes cadeau, ...)
On va ensuite copier la requรชte dans burp suite en faisant un clic droit et en sรฉlรฉctionnant "copy as curl command".
Envoyer la requรชte simultanรฉment
La seconde รฉtape vise ร envoyer la mรชme requรชte exactement au mรชme moment pour voir s'il est possible de contourner la vรฉrifiacation de pour l'une des deux requรชtes.
Exemple:
On a un compte en banque possรฉdant 100โฌ, notre but est de savoir si on peut envoyer plus d'argent que ce que nous avons rรฉellement.
On va donc envoyer la requรชte de transfert plusieurs fois aussi rapidement que possible avec la requรชte copiรฉe dans l'รฉtape prรฉcรฉdente.
Ce qui nous donnera quelque chose comme:
&: permet de lancer une commande en background (les commandes curl sont envoyรฉes en mรชme temps et pas les unes aprรจs les autres).
Il faut garder en tรชte que pour tester une race condition, il faut que la requรชte envoyรฉe ne soit pas rรฉpรฉtable (ici, si notre compte contient exactement 100โฌ, si on tente d'envoyer 500โฌ l'opรฉration sera refusรฉe et inversement si on envoie 10โฌ l'opรฉration sera autorisรฉe 10 fois ce qui n'est pas le but.
Avec Burp suite
Turbo intruder exemples:
Bypass de rate limit
Envoyer la requรชte dans Turbo intruder avec "%s" ร la place de l'รฉlรฉment ร remplacer
Choisir le script qui se rapproche le plus du besoin dans la liste dรฉroulante
Modifier le script selon le contexte (wordlists.clipboard, boucles, conditions etc)
Derniรจre mise ร jour