Contournement de login via le flux implicite OAuth

Authentication bypass via OAuth implicit flow

Contexte du lab

Ce laboratoire utilise un fournisseur OAuth pour permettre la connexion via un compte “réseau social”. À cause d’une validation insuffisante côté application cliente, il est possible de se connecter au compte d’un autre utilisateur sans connaître son mot de passe.

Objectif : se connecter en tant que carlos (email : [email protected]). Compte “social media” disponible : wiener:peter.

Observations

  • Lorsqu’on tente de se connecter, l’application redirige vers une page OAuth :

    • “We are now redirecting you to login with social media...”

  • Après authentification sur le domaine OAuth et acceptation des autorisations (profil + email), l’application envoie ensuite une requête vers un endpoint interne, typiquement :

    • POST /authenticate

  • Cette requête contient un JSON du type :

Point clé : l’application fait confiance aux champs email et username transmis par le client, au lieu de lier strictement ces valeurs au token.

Exploitation

  1. Se connecter normalement via OAuth avec le compte wiener.

  2. Intercepter la requête envoyée à POST /authenticate.

  3. Modifier uniquement les champs d’identité, en conservant le même token :

  1. Envoyer la requête modifiée.

Résultat

  • Le serveur répond 302 Found, ce qui indique que la session est créée et que l’application considère l’utilisateur comme authentifié.

  • On obtient alors une session connectée en tant que Carlos.

Mis à jour