Aquisição de Conta - Dentro do Inquilino

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.

Como descobri essa vulnerabilidade?
- Entrei na conta (as credenciais de administrador foram fornecidas pela plataforma) e cliquei na funcionalidade Convidar usuário


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



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


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



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


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



Por que aconteceu?
Na minha opinião,
Duas falhas estavam lá no aplicativo da web
- O token de convite vazou na resposta ao convidar o usuário
- 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)

Mitigação
Haverá duas mitigações aqui
- O código de convite não deve ser enviado na resposta do servidor
- 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
// …
}
