Programmation web

Vulnérabilités de condition de concurrence dans les applications Web

Vulnérabilités de condition de concurrence dans les applications Web
Lorsqu'une application Web configurée pour gérer des fonctions dans une séquence fixe est requise pour exécuter deux opérations ou plus simultanément, une attaque de condition de concurrence se produit. Cette technique profite d'un délai entre le moment où un service est introduit et le moment où un contrôle de sécurité se produit. Cette attaque peut être menée de l'une ou l'autre des deux manières, basées sur des applications multithreads : intrusion subie par des processus non fiables et intrusion subie par un processus digne de confiance qui pourrait avoir les mêmes droits.

Différents processus peuvent interagir les uns avec les autres sans mesures adéquates. Ces attaques sont également appelées attaques Time of Check, Time of Use ou attaques TOC/TOU. Les vulnérabilités des conditions de concurrence se trouvent en premier lieu en raison d'erreurs de programmation de base que les développeurs créent généralement, et ces échecs se sont avérés coûteux. Des entités malveillantes ont exploité les conditions de concurrence à de nombreuses fins malveillantes, je.e., d'obtenir des bons gratuits pour voler de l'argent sur des comptes en ligne et des entreprises d'investissement.

Supposons que deux threads d'exécution parallèles tentent d'augmenter la valeur d'une variable globale de 5. En fin de compte, la variable globale aurait donc une valeur de 10. Cependant, si tous les threads s'exécutent simultanément, l'exécution peut être erronée sans verrouillage des ressources ni synchronisation. Lorsque le premier thread effectue des manipulations sur cette variable globale, le deuxième thread la lit et commence à effectuer d'autres manipulations. Dans ce cas, la valeur finale ne serait pas celle attendue.

Cela se produit car l'effet d'une terminaison de thread dépend du résultat de l'autre. Lorsque les deux threads sont exécutés simultanément, il y aura des conséquences inattendues.

Portée des attaques de condition de course :

Imaginez que quelque chose d'un peu plus critique soit exécuté par les deux threads de l'exemple ci-dessus, comme l'échange d'argent entre comptes bancaires. Pour envoyer l'argent correctement, le programme devra exécuter ces tâches dans cet ordre ; Vérifiez s'il y a suffisamment de solde sur le compte de l'expéditeur, ajoutez de l'argent sur le compte du destinataire, puis déduisez du compte de l'expéditeur. Mais si vous soumettez simultanément deux demandes, vous pourrez peut-être déclencher une condition dans laquelle la séquence d'exécution du thread change. Dans une situation comme celle-ci, vous vous retrouverez avec un montant différent de celui prévu.

Une vulnérabilité aux conditions de course a été découverte par Egor Homakov sur le site Web de Starbucks. Il a découvert un moyen de créer gratuitement une quantité infinie de crédit sur les chèques-cadeaux Starbucks en utilisant différents navigateurs avec différents cookies.

L'importante attaque Meltdown est un exemple de vulnérabilité aux conditions de concurrence. Dans l'attaque par fusion, la faiblesse est déclenchée par le traitement parallèle de la récupération des données de la mémoire et de l'authentification pour savoir si un utilisateur est autorisé ou non à accéder à la mémoire. Cette faille permet à un outil d'éviter les contrôles de privilèges standard qui séparent le mécanisme d'attaque de l'accès aux données du système d'exploitation. Cette faille permet à tout processus non autorisé d'afficher des données et des informations à partir de toute autre adresse connectée à l'état de la progression actuelle dans la mémoire. Dans le processus d'exécution défectueuse, les informations provenant d'une adresse non approuvée seront fréquemment rapidement empilées dans le cache de la CPU, à partir duquel les informations peuvent être récupérées.

Scénarios d'attaque réels :

En soumettant de nombreuses requêtes au serveur Web en continu, vous pouvez rechercher et manipuler les conditions de course dans les applications Web. Si vous souhaitez voir si vous pouvez ou non retirer plus d'argent que vous n'en avez sur votre compte bancaire, grâce à la fonction curl, vous pouvez envoyer simultanément plusieurs demandes de retrait au serveur.

curl (retrait 50000) & (retrait 50000) & (retrait 50000) & (retrait 50000) & (retrait 50000) & (retrait 50000)

Plus vous déposez de demandes dans un court laps de temps, plus grandes sont les chances que votre attaque fonctionne.

De plus, si vous envoyez des demandes de suivi asynchrones, vous suivrez plusieurs fois un utilisateur au lieu d'envoyer une réponse d'erreur. je.e., si vous ajoutez un faux en-tête contenant %s lors de la suppression des requêtes à l'aide de turbo intrus et collez le code python suivant :

def followReqs (cible, listes de mots) :
moteur = RequestEngine(endpoint=cible.point final,
Connexions simultanées=40,
demandesParConnexion=100,
pipeline=Faux
)
pour i dans la plage (40):
moteur.file d'attente(cible.req, str(i), gate='check')
moteur.openGate('vérifier')
moteur.terminé(délai d'attente=60)
def responseHandle(req, intéressant):
tableau.ajouter (req)

Vous verrez un bouton Attaque. Après avoir appuyé dessus, le Turbo Intruder soumet 40 requêtes et scanne les codes d'état. Si vous voyez plusieurs réponses avec le statut 201 Généré, cela indique plusieurs fois que vous avez suivi la personne.

Il existe une vulnérabilité de condition de concurrence dans laquelle vous pouvez accéder à plusieurs consoles proposées aux comptes gratuits. La plupart des sites Web qui fournissent des consoles gratuites ont des comptes gratuits, des forfaits standard et premium. Les comptes gratuits ne fournissent que 2 ou 3 consoles par utilisateur. Pour briser cette limite et utiliser des consoles illimitées, intrusez la requête GET en utilisant des charges utiles NULL plusieurs fois, comme 100 ou 200. Et puis supprimez manuellement l'une des consoles de l'interface utilisateur pendant l'exécution des threads.

Conclusion:

Comme moyen de saper les contrôles d'accès, les conditions de course sont incluses. Tout programme dépendant de mécanismes de contrôle d'accès peut être vulnérable. La plupart du temps, sur les sites des institutions financières, les hackers exploitent les conditions de course. Étant donné que cela pourrait entraîner des avantages financiers illimités pour le pirate informatique si une condition de concurrence pouvait être découverte sur une fonctionnalité vitale telle que le retrait d'espèces, le transfert d'argent ou le paiement par carte de crédit. Les plateformes de commerce électronique, les jeux vidéo et les services de vote en ligne sont d'autres technologies à haut risque. La mise en œuvre d'une simultanéité sûre est le secret pour éviter les conditions de course. Et vous pouvez également utiliser des verrous de ressources. Il y aura également une fonction de verrouillage intégrée pour les langages de programmation avec des capacités de simultanéité qui aident à prévenir de telles conditions. De plus, conformément aux normes de codage sécurisé, je.e., le concept de moindre privilège et le code d'audit réduiront les risques de violation du programme.

Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...
Comment utiliser AutoKey pour automatiser les jeux Linux
AutoKey est un utilitaire d'automatisation de bureau pour Linux et X11, programmé en Python 3, GTK et Qt. En utilisant ses fonctionnalités de script e...
Comment afficher le compteur FPS dans les jeux Linux
Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...