๐Ÿชž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:

curl ... & curl ... & curl ... & curl ... & curl ... & curl ... & curl ... & curl ... & curl ... & curl ... &

&: 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

  1. Envoyer la requรชte dans Turbo intruder avec "%s" ร  la place de l'รฉlรฉment ร  remplacer

  2. Choisir le script qui se rapproche le plus du besoin dans la liste dรฉroulante

  3. Modifier le script selon le contexte (wordlists.clipboard, boucles, conditions etc)

Derniรจre mise ร  jour