Conditions de course : bug bounties

Dec 25 2022
Les vulnérabilités aux conditions de course, à mon avis, sont l'une des vulnérabilités Web les plus intéressantes. Ils découlent des erreurs les plus simples que commettent les développeurs et ces erreurs se sont avérées coûteuses.

Les vulnérabilités aux conditions de course, à mon avis, sont l'une des vulnérabilités Web les plus intéressantes. Ils découlent des erreurs les plus simples que commettent les développeurs et ces erreurs se sont avérées coûteuses.

Dans le passé, les pirates ont utilisé des conditions de concurrence pour voler de l'argent aux banques en ligne, aux sites Web d'échange de crypto-monnaie, aux sites Web de commerce électronique et plus encore.

Quelles sont les conditions de course ?

  • Des conditions de concurrence surviennent lorsque deux sections de code conçues pour être exécutées dans une séquence sont exécutées dans le désordre.
  • Afin de mieux comprendre ces vulnérabilités, vous devez d'abord comprendre le concept de concurrence.
  • En programmation informatique, la simultanéité est la capacité d'exécuter simultanément différentes parties de code sans affecter le résultat du programme.
  • La concurrence a deux types : le multitraitement et le multithreading.
  • Le multitraitement fait référence à l'utilisation de plusieurs processeurs pour effectuer des tâches simultanées.
  • Cependant, le multithreading se produit lorsqu'un seul processeur exécute les tâches simultanées en utilisant des "threads". Cependant, ces threads ne s'exécutent pas réellement en même temps ; ils utilisent à tour de rôle la puissance du processeur. Lorsqu'un thread est inactif, d'autres threads peuvent continuer à profiter des ressources informatiques inutilisées. Organiser la séquence d'exécution de plusieurs threads s'appelle la planification.
  • Cette programmation est ce qui provoque des conditions de concurrence.
  • Une condition de concurrence devient une vulnérabilité lorsqu'elle affecte un mécanisme de contrôle de sécurité.
  • Imaginez que deux threads exécutent le transfert d'argent entre comptes bancaires. L'application devrait effectuer trois tâches pour transférer l'argent correctement. Tout d'abord, il vérifie si le compte d'origine dispose de suffisamment d'argent, puis il ajoute l'argent au compte de destination et, enfin, il soustrait le montant du compte d'origine.

FIL 1

  1. Vérifiez le solde du compte de A (> 100 $); 2. Ajoutez 100$ au compte B; 3. Déduire 100$ du compte A
  1. Vérifier le solde du compte de A (<100 $) => Échec du transfert, fonds insuffisants.
  1. [Thread 1] Vérifier le solde du compte A (100$);
  2. [Thread 2] Vérifier le solde du compte A (100$);
  3. [Thread 1] Ajouter 500$ au compte B ; [100 $ en A, 100 $ en B]
  4. [Thread 2] Ajoutez 500 $ au compte B ; [100 $ en A, 200 $ en B]
  5. [Thread 1] Déduire 500 $ du compte A ; [0$ en A ; 200$ en B]
  6. [Thread 2] Déduire 500 $ du compte A ; [0$ en A ; 200$ en B]

Bien que les vulnérabilités des conditions de concurrence soient principalement associées aux sites Web financiers, les pirates peuvent également les utiliser dans d'autres situations, comme le truquage de campagnes de vote en ligne.

Comment empêcher

Le concept de synchronisation est important lorsqu'il s'agit de la concurrence dans la programmation. Cela implique de s'assurer que les threads ou les processus n'accèdent pas simultanément aux ressources partagées, car cela peut entraîner des conditions de concurrence et des incohérences de données. Une façon d'obtenir la synchronisation consiste à utiliser des verrous de ressources, qui empêchent les autres threads d'accéder à une ressource jusqu'à ce que le thread qui détient le verrou en ait fini avec elle.

En plus de la synchronisation, il est également important de suivre des pratiques de codage sécurisées pour éviter que les conditions de concurrence ne deviennent des problèmes de sécurité plus graves. Le principe du moindre privilège est l'une de ces pratiques, qui consiste à n'accorder aux applications et aux processus que les privilèges dont ils ont besoin pour accomplir leurs tâches. Par exemple, si une application n'a besoin que de lire un fichier, elle ne doit pas recevoir d'autorisations d'écriture ou d'exécution. Cela réduit les risques de compromission du système lors d'une attaque.

Comment chasser ?

1. Trouvez des fonctionnalités sujettes aux conditions de course :

  • Les conditions de concurrence se produisent souvent dans les fonctionnalités qui impliquent la mise à jour de valeurs numériques, telles que le vote en ligne, les scores de jeu, les virements bancaires, les paiements de commerce électronique et les soldes de cartes-cadeaux. Pour identifier ces fonctionnalités dans une application, vous pouvez rechercher les demandes impliquées dans la mise à jour de ces numéros. Par exemple, si vous souhaitez tester la demande utilisée pour transférer de l'argent depuis un site bancaire, vous pouvez copier la demande à l'aide de Burp Suite en cliquant dessus avec le bouton droit de la souris et en sélectionnant "Copier en tant que commande curl".
  • Pour tester et éventuellement exploiter les conditions de concurrence dans une cible, vous pouvez envoyer plusieurs requêtes au serveur en même temps. Par exemple, si vous souhaitez vérifier s'il est possible de transférer plus d'argent que vous n'en avez sur votre compte bancaire, vous pouvez utiliser la commande curl pour envoyer plusieurs demandes de transfert simultanément. Une façon de procéder consiste à copier la commande de Burp, à la coller dans le terminal, puis à insérer un symbole "&" entre chaque commande. Cela vous permettra d'exécuter plusieurs commandes simultanément en arrière-plan sur un système Linux.
  • curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
    & curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
    

  • C'est une évidence, vérifiez si votre attaque a réussi

Il est important de prendre en compte l'impact potentiel d'une condition de concurrence sur la fonctionnalité affectée lors de l'évaluation de la gravité de la vulnérabilité. Une condition de concurrence qui permet à un attaquant d'obtenir un accès illimité à des ressources financières, par exemple par le biais d'un retrait d'espèces ou d'un transfert de fonds, pourrait être très préjudiciable à la fois aux personnes concernées et à l'organisation.

En plus du gain financier, un attaquant peut être en mesure d'utiliser une condition de concurrence pour gagner de l'influence sociale ou accéder à des informations sensibles. Par exemple, une condition de concurrence qui permet à un attaquant d'obtenir un accès non autorisé à un compte de réseau social pourrait potentiellement être utilisée pour diffuser des informations erronées ou manipuler l'opinion publique.

Lors du rapport sur l'impact d'une condition de concurrence, il est important d'articuler clairement les conséquences potentielles pour les personnes concernées et l'organisation. Cela peut inclure la perte financière potentielle, la perte d'informations sensibles ou l'atteinte à la réputation de l'organisation. Fournir des informations claires et détaillées sur l'impact potentiel de la vulnérabilité peut aider à hiérarchiser sa résolution et à atténuer les conséquences potentielles.

J'espère que cet article de blog a aidé! Bonne chasse et joyeux Noël !