Conditions de concurrence et contrebande de requêtes
Race / Smuggling propose deux outils spécialisés pour les attaques HTTP sensibles à la temporisation et celles visant le protocole.
Conditions de concurrence
L'onglet Conditions de concurrence envoie simultanément plusieurs copies d'une requête au même point de terminaison et permet de comparer les réponses et les temps d'exécution entre les exécutions parallèles.
Quand l'utiliser
- TOCTOU (time-of-check/time-of-use) : testez si des requêtes concurrentes permettent de séparer une vérification de l'opération de modification d'état qu'elle contrôle.
- Manipulation de comptes : envoyez des modifications de solde, des utilisations de coupons ou des opérations soumises à des limites en parallèle pour rechercher une double dépense ou une utilisation excessive.
- Contournement des limites de vote ou de débit : confirmez si les limites par utilisateur sont appliquées de manière atomique.
Exécuter un test de concurrence
- Construisez la requête cible dans l'onglet Conditions de concurrence ou envoyez-la à cet onglet.
- Définissez la valeur Requêtes simultanées, c'est-à-dire le nombre de copies à envoyer en parallèle.
- Cliquez sur Envoyer {count} requêtes. Toutes les copies sont envoyées aussi simultanément que possible.
- Examinez le tableau des réponses : code de statut, corps et temps écoulé pour chaque copie.
- Les différences entre les réponses (codes de statut différents, corps de réponse différents, succès inattendu à partir de la deuxième copie) indiquent une fenêtre de concurrence.
Tests de concurrence HTTP/2 avec un seul paquet
Si la cible prend en charge HTTP/2, activez H2 paquet unique. HTTP/2 multiplexe toutes les requêtes parallèles sur une seule connexion, ce qui élimine la gigue réseau et rend leur arrivée simultanée au serveur plus fiable.
Contrebande de requêtes HTTP
L'onglet HTTP Smuggling teste la façon dont un serveur traite des en-têtes Content-Length et Transfer-Encoding ambigus afin de détecter une désynchronisation entre le frontal et le backend.
Contexte
Lorsqu'un proxy inverse et un serveur backend ne s'accordent pas sur la fin d'une requête et le début de la suivante, un préfixe introduit clandestinement dans la requête A peut être ajouté au début de la requête B. Les conséquences vont de l'empoisonnement du cache au contournement de l'authentification et à l'injection de requêtes arbitraires.
Variantes de désynchronisation
| Variante | Description |
|---|---|
| CL.TE | Le frontal utilise Content-Length ; le backend utilise Transfer-Encoding |
| TE.CL | Le frontal utilise Transfer-Encoding ; le backend utilise Content-Length |
| TE.TE | Les deux utilisent Transfer-Encoding, mais réagissent différemment à un en-tête obscurci |
Exécuter une sonde de contrebande de requêtes
- Sélectionnez le point de terminaison cible dans l'onglet HTTP Smuggling.
- Choisissez la variante de désynchronisation à tester.
- Cliquez sur Tester le HTTP Smuggling. L'outil envoie la requête spécialement construite et mesure la réponse.
- Un dépassement de délai ou une réponse inattendue à la deuxième requête de la séquence indique une désynchronisation potentielle.
- Confirmez manuellement avant de créer un constat : des faux positifs surviennent lorsque les conditions réseau provoquent un dépassement de délai sans rapport avec la sonde.