Web Security Academy

HTTP Host header attacks - Lab : Basic password reset poisoning

Objectif :

  • Changer le mot de passe du compte d'un utilisateur s'appelant Carlos pour ensuite se connecter dessus. L'identifiant et le mot de passe d'un autre compte sur le site sont donnés : wiener / peter. Le panel d'administration d'un serveur distant est mis à disposition pour analyser les requêtes qu'il reçoit.

Solution :

On lance le lab et on se retrouve dans un blog :

On clique sur "Login" pour accéder à la page de connexion et on constate qu'un système de récupération de mot de passe oublié est disponible à partir du bouton "Forgot password" :

On accède à cette section et il nous demande de rentrer un nom de compte ou une adresse mail :

On inscrit le pseudo "carlos" et on inspecte la requête émise vers le serveur :

C'est une requête POST avec l'entête "Host" présente.

On suppose que le serveur va générer un token associé au compte pour ensuite créer un lien à partir de l'adresse présente dans l'entête Host, qu'il va envoyer par mail au détenteur du compte, redirigeant la personne vers la page de changement de mot de passe de ce compte en particulier en incluant ce token en tant que paramètre GET.

Le lien sera de la forme : https://[ URL contenu dans l'entête Host ]/changement_de_mot_de_passe?token=[TOKEN].

Si on peut récupérer ce token, on pourra donc changer le mot de passe de la personne.

Pour ce faire, dans la requête POST envoyée au serveur lorsque l'on clique sur "Submit" au moment d'écrire le nom de compte ou l'email, on va changer le contenu du header Host avec l'adresse d'un autre serveur dont on peut analyser les requêtes reçues. Lorsque la personne recevra l'email de changement de mot de passe, s'il clique sur le lien présent, on recevra le token.

On applique donc la procédure et le serveur ne renvoie pas d'erreur et affiche le message suivant :

On accède au log de notre serveur distant et on constate que le token a bien été réceptionné :

L'utilisateur Carlos a malencontreusement cliqué sur le lien qu'il a reçu par email.

Il suffit d'accéder à l'URL de changement de mot de passe du compte associé au token reçue pour créer un nouveau mot de passe :

On se connecte ensuite sur le compte et le lab est désormais validé.