Découverte de la réécriture par le front-end
Exploiting HTTP request smuggling to reveal front-end request rewriting
Le site repose sur un serveur front-end et un serveur back-end. Le front-end n’accepte pas le chunked encoding. L’accès au panneau d’administration /admin est réservé aux utilisateurs provenant de 127.0.0.1. Avant de transmettre les requêtes au back-end, le front-end ajoute un en-tête personnalisé contenant l’adresse IP du client. Ce comportement ressemble au classique X-Forwarded-For, mais le nom de l’en-tête est différent.
L’objectif est double :
Détourner une requête pour révéler le nom de cet en-tête ajouté par le front-end.
Envoyer une requête smuggled contenant cet en-tête, en le forçant à la valeur 127.0.0.1, afin d’accéder au panneau d’administration et supprimer l’utilisateur carlos.

Analyse du comportement
Le champ envoyé dans le paramètre search est renvoyé dans la réponse, montrant qu’on peut l’utiliser pour observer les effets de nos injections.
En envoyant :
la requête est traitée sans erreur (200 OK), ce qui confirme que le front-end interprète Content-Length, alors que le back-end ignore Transfer-Encoding.
Lorsqu’on smuggle une requête POST additionnelle :
les octets excédentaires (ici “PO”) sont reflétés, ce qui démontre que le back-end a bien reçu la requête smuggled.
En augmentant le Content-Length à 125, la réponse expose l’en-tête ajouté par le front-end. Cet en-tête est :

X-KwWCmS-Ip

Accès au panneau d’administration
En forgeant une requête smuggled qui inclut cet en-tête forcé à 127.0.0.1, on obtient l’accès à /admin :

Suppression de l’utilisateur carlos
Une seconde requête smuggled permet d’appeler directement l’endpoint de suppression :
L’utilisateur carlos est alors supprimé via le back-end, en se faisant passer pour une requête interne autorisée.
Mis à jour
Ce contenu vous a-t-il été utile ?