Forçage de liaison entre profils OAuth

jForced OAuth profile linking

Description du laboratoire

Ce laboratoire propose une fonctionnalité permettant de lier un profil de réseau social à un compte utilisateur afin de se connecter via OAuth au lieu d’utiliser l’authentification classique. En raison d’une implémentation non sécurisée du flux OAuth côté client, un attaquant peut détourner ce mécanisme pour associer son propre profil social au compte d’un autre utilisateur.

Objectif : Réaliser une attaque CSRF pour lier votre profil de réseau social au compte administrateur du site, puis accéder au panneau d’administration et supprimer l’utilisateur carlos.

Contraintes :

  • L’administrateur ouvre systématiquement tout contenu envoyé depuis le serveur d’exploitation.

  • L’administrateur dispose toujours d’une session active sur le site du blog.

Comptes disponibles

  • Compte du site : wiener / peter

  • Profil réseau social : peter.wiener / hotdog

Analyse du mécanisme OAuth

  • Le site permet une connexion classique via identifiant et mot de passe.

Une connexion via OAuth (réseau social) est également disponible.

  • Un utilisateur déjà existant peut lier un profil de réseau social à son compte.

Lors de la liaison, une requête OAuth est envoyée vers le point d’authentification :

Après authentification, l’utilisateur est redirigé vers une URL contenant un code OAuth :

Ce code :

  • Est à usage unique

  • Permet de lier le profil OAuth au compte actuellement authentifié

Exploitation de la vulnérabilité

  1. Démarrer la procédure de liaison entre votre compte et votre profil de réseau social.

  2. Intercepter et copier l’URL /oauth-linking?code=....

Abandonner la requête afin que le code ne soit pas consommé.

Depuis le serveur d’exploitation, envoyer cette URL à l’administrateur via une attaque CSRF, par exemple à l’aide d’une iframe

L’administrateur charge la page :

Le code OAuth est consommé

Le profil OAuth de l’attaquant est lié au compte administrateur

Mis à jour