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 :

  1. Détourner une requête pour révéler le nom de cet en-tête ajouté par le front-end.

  2. 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 ?