Aquisição de Conta - Dentro do Inquilino

Dec 03 2022
Resumo: Account Takeover (ATO) é um ataque usando o qual um gato invasor se apropria da conta de outra pessoa. Existem várias maneiras de um ataque de aquisição de conta, ou seja, credenciais de força bruta, preenchimento de credenciais, manipulação de resposta, envenenamento de redefinição de senha, engenharia social e phishing, ataques de desvio de 2FA, etc.

Resumo :

Account Takeover (ATO) é um ataque usando o qual um gato invasor se apropria da conta de outra pessoa. Existem várias maneiras de um ataque de aquisição de conta, ou seja, credenciais de força bruta, preenchimento de credenciais, manipulação de resposta, envenenamento de redefinição de senha, engenharia social e phishing, ataques de desvio de 2FA, etc.

Descrição :

Encontrei uma vulnerabilidade em um programa privado em uma das plataformas de recompensas de bugs pela qual recebi 150 USD. Ao navegar no aplicativo, encontrei uma funcionalidade de convite que era vulnerável ao vazamento de token de convite. Aproveitei o token de convite vazado para assumir o controle da conta da vítima por meio de um e-mail não registrado que foi tratado por mim (atacante).

O que é inquilino?

Em palavras simples, um inquilino é definido como um grupo de usuários de uma única organização ou empresa. Há um administrador no locatário que pode convidar outros usuários para trabalhar na empresa pela qual o locatário foi criado. Um inquilino pode ser do departamento de TI, departamento de contas, departamento de vendas, etc.

Inquilino - Básico

Como descobri essa vulnerabilidade?

  1. Entrei na conta (as credenciais de administrador foram fornecidas pela plataforma) e cliquei na funcionalidade Convidar usuário
  2. Conta de Administrador
Funcionalidade de convite

3. Em seguida, interceptei a solicitação usando o burpsuite e cliquei com o botão direito do mouse na solicitação > Interceptar > Resposta a esta solicitação

Burpsuite - Pedido
Burpsuite - Resposta
Convite pendente

4. Elaborei a URL para o token de convite e abri no navegador porque o token já havia vazado na resposta, então cliquei em Aceitar e ele me pediu para inserir um e-mail

URL do token de convite (vítima)
Solicitando o e-mail de convite (e-mail da vítima)

5. Depois fui ao Temp Mail e copiei o e-mail não registrado e colei no site e cliquei no botão e depois cliquei em Aprovar

Correio temporário
Entrou no e-mail não registrado (e-mail do invasor)
Aprovar

6. Em seguida, o código foi enviado para um e-mail não registrado (e-mail do invasor)

Código de verificação enviado
Código de verificação

7. Usei o código e aceitei o convite enviado à vítima

Código de verificação
Aquisição de conta
Convite Aceito

Por que aconteceu?

Na minha opinião,

Duas falhas estavam lá no aplicativo da web

  1. O token de convite vazou na resposta ao convidar o usuário
  2. A validação do usuário convidado no token de convite não foi feita

Qualquer administrador pode assumir o controle da conta de qualquer usuário que seja convidado pelo administrador para o locatário.

A gravidade seria baixa a média porque o ataque está dentro do locatário e, além dele, a única coisa que um administrador pode fazer aqui é representar o usuário convidado e executar as ações em nome desse usuário e um administrador não pode representar o usuário existente .

CVSS calculado

Sequência de vetor - CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

Pontuação - 5,4 (Médio)

Fluxo de ataque

Mitigação

Haverá duas mitigações aqui

  1. O código de convite não deve ser enviado na resposta do servidor
  2. Uma verificação deve ser realizada no código de convite e no endereço de e-mail convidado

// Verifique se o e-mail fornecido corresponde ao código do convite
if (email == InviteCode) {
// O e-mail corresponde ao código do convite
// Prossiga com o restante do processo de autenticação
// …
} else {
// O e-mail não corresponde ao convite code
// Retorna uma mensagem de erro ou solicita o código de convite correto
// …
}