Prise de contrôle de compte - À l'intérieur du locataire

Dec 03 2022
Résumé : Account Takeover (ATO) est une attaque par laquelle un chat attaquant s'approprie le compte d'une autre personne. Il existe plusieurs façons d'effectuer une attaque de prise de contrôle de compte, à savoir les informations d'identification par force brute, le bourrage d'informations d'identification, la manipulation des réponses, l'empoisonnement de la réinitialisation du mot de passe, l'ingénierie sociale et le phishing, les attaques de contournement 2FA, etc.

Sommaire :

La prise de contrôle de compte (ATO) est une attaque par laquelle un chat attaquant s'approprie le compte d'une autre personne. Il existe plusieurs façons d'effectuer une attaque de prise de contrôle de compte, à savoir les informations d'identification par force brute, le bourrage d'informations d'identification, la manipulation des réponses, l'empoisonnement de la réinitialisation du mot de passe, l'ingénierie sociale et le phishing, les attaques de contournement 2FA, etc.

La description :

J'ai trouvé une vulnérabilité sur un programme privé sur l'une des plateformes de bug bounty pour laquelle j'ai reçu 150 USD. En parcourant l'application, j'ai trouvé une fonctionnalité d'invitation qui était vulnérable aux fuites de jetons d'invitation. J'ai profité de la fuite du jeton d'invitation pour prendre le contrôle du compte de la victime via un e-mail non enregistré que j'ai géré (attaquant).

Qu'est-ce qu'un locataire ?

En termes simples, un locataire est défini comme un groupe d'utilisateurs d'une seule organisation ou entreprise. Il y a un administrateur dans le locataire qui peut inviter d'autres utilisateurs à travailler pour la société par laquelle le locataire a été créé. Un locataire peut appartenir au service informatique, au service comptable, au service commercial, etc.

Locataire - Basique

Comment j'ai trouvé cette vulnérabilité ?

  1. Je me suis connecté au compte (les informations d'identification d'administrateur ont été fournies par la plate-forme) et j'ai cliqué sur la fonctionnalité Inviter un utilisateur
  2. Compte administrateur
Fonctionnalité d'invitation

3. Ensuite, j'ai intercepté la demande à l'aide de burpsuite et j'ai fait un clic droit sur la demande> Intercepter> Répondre à cette demande

Burpsuite - Demande
Burpsuite - Réponse
Invitation en attente

4. J'ai créé l'URL du jeton d'invitation et l'ai ouvert dans le navigateur car le jeton avait déjà fuité dans la réponse, puis j'ai cliqué sur Accepter et il m'a demandé d'entrer un e-mail

URL du jeton d'invitation (victime)
Demander un e-mail invité (E-mail de la victime)

5. Ensuite, je suis allé à Temp Mail et j'ai copié l'e-mail non enregistré et je l'ai collé sur le site Web et j'ai cliqué sur le bouton, puis j'ai cliqué sur Approuver

Courrier temporaire
Saisie de l'e-mail non enregistré (e-mail de l'attaquant)
Approuver

6. Ensuite, le code a été envoyé à un e-mail non enregistré (e-mail de l'attaquant)

Code de verification envoyé
Le code de vérification

7. J'ai utilisé le code et j'ai accepté l'invitation envoyée à la victime

Le code de vérification
Prise de contrôle de compte
Invitation acceptée

Pourquoi c'est arrivé ?

À mon avis,

Deux failles étaient là dans l'application web

  1. Le jeton d'invitation a été divulgué dans la réponse lors de l'invitation de l'utilisateur
  2. La validation de l'utilisateur invité sur le jeton d'invitation n'a pas été effectuée

Tout administrateur peut reprendre le compte de tout utilisateur invité par l'administrateur au locataire.

La gravité serait faible à moyenne car l'attaque se situe au sein du locataire et à part cela, la seule chose qu'un administrateur peut faire ici est de se faire passer pour l'utilisateur invité et d'effectuer les actions au nom de cet utilisateur et un administrateur n'est pas en mesure de se faire passer pour l'utilisateur existant. .

CVSS calculé

Chaîne vectorielle - CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

Note - 5,4 (moyenne)

Flux d'attaque

Atténuation

Il y aura deux atténuations ici

  1. Le code d'invitation ne doit pas être envoyé dans la réponse du serveur
  2. Une vérification doit être effectuée par rapport au code d'invitation et à l'adresse e-mail invitée

// Vérifiez si l'e-mail fourni correspond au code d'invitation
if (email == inviteCode) {
// L'e-mail correspond au code d'invitation
// Continuez avec le reste du processus d'authentification
// …
} else {
// L'e-mail ne correspond pas à l'invitation code
// Renvoie un message d'erreur ou demande le code d'invitation correct
// …
}