Adquisición de cuenta - Inside The Tenant

Dec 03 2022
Resumen: la apropiación de cuenta (ATO) es un ataque mediante el cual un gato atacante toma posesión de la cuenta de otra persona. Hay varias formas de un ataque de apropiación de cuenta, a saber, credenciales de fuerza bruta, relleno de credenciales, manipulación de respuestas, envenenamiento por restablecimiento de contraseña, ingeniería social y phishing, ataques de omisión 2FA, etc.

Resumen :

Account Takeover (ATO) es un ataque mediante el cual un gato atacante toma posesión de la cuenta de otra persona. Hay varias formas de un ataque de apropiación de cuenta, a saber, credenciales de fuerza bruta, relleno de credenciales, manipulación de respuestas, envenenamiento por restablecimiento de contraseña, ingeniería social y phishing, ataques de omisión 2FA, etc.

Descripción :

Encontré una vulnerabilidad en un programa privado en una de las plataformas de recompensas por errores por la que me otorgaron 150 USD. Mientras navegaba por la aplicación, encontré una función de invitación que era vulnerable a la fuga de tokens de invitación. Aproveché el token de invitación filtrado para apoderarme de la cuenta de la víctima a través de un correo electrónico no registrado que manejé yo (el atacante).

¿Qué es Inquilino?

En palabras simples, un inquilino se define como un grupo de usuarios de una sola organización o empresa. Hay un administrador en el arrendatario que puede invitar a otros usuarios a trabajar para la empresa que creó el arrendatario. Un inquilino puede ser del departamento de TI, departamento de cuentas, departamento de ventas, etc.

Inquilino - Básico

¿Cómo encontré esta vulnerabilidad?

  1. Inicié sesión en la cuenta (la plataforma proporcionó las credenciales de administrador) e hice clic en la función Invitar usuario
  2. Cuenta de administrador
Funcionalidad de invitación

3. Luego intercepté la solicitud usando burpsuite e hice clic derecho en la solicitud> Interceptar> Responder a esta solicitud

Burpsuite - Solicitar
Burpsuite - Respuesta
Invitación pendiente

4. Elaboré la URL para el token de invitación y lo abrí en el navegador porque el token ya se filtró en la respuesta, luego hice clic en Aceptar y me pidió que ingresara un correo electrónico.

URL del token de invitación (víctima)
Solicitud de correo electrónico de invitación (correo electrónico de la víctima)

5. Luego fui a Temp Mail y copié el correo electrónico no registrado y lo pegué en el sitio web e hice clic en el botón y luego hice clic en Aprobar

correo temporal
Ingresó el correo electrónico no registrado (correo electrónico del atacante)
Aprobar

6. Luego, el código se envió a un correo electrónico no registrado (correo electrónico del atacante)

Código de verificacion enviado
Código de verificación

7. Usé el código y acepté la invitación enviada a la víctima

Código de verificación
Adquisición de cuenta
Invitación aceptada

Porqué sucedió ?

En mi opinión,

Había dos fallas en la aplicación web.

  1. El token de invitación se filtró en la respuesta al invitar al usuario
  2. No se realizó la validación del usuario invitado en el token de invitación.

Cualquier administrador puede hacerse cargo de la cuenta de cualquier usuario invitado por el administrador al arrendatario.

La gravedad sería de baja a media porque el ataque está dentro del inquilino y, aparte de eso, lo único que puede hacer un administrador aquí es hacerse pasar por el usuario invitado y realizar las acciones en nombre de ese usuario y un administrador no puede hacerse pasar por el usuario existente. .

CVSS calculado

Cadena vectorial - CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

Puntuación - 5.4 (Medio)

Flujo de ataque

Mitigación

Habrá dos mitigaciones aquí

  1. El código de invitación no debe enviarse en la respuesta del servidor.
  2. Se debe realizar una verificación contra el código de invitación y la dirección de correo electrónico invitada.

// Comprobar si el correo electrónico proporcionado coincide con el código de invitación
if (email == inviteCode) {
// El correo electrónico coincide con el código de invitación
// Continúa con el resto del proceso de autenticación
// …
} else {
// El correo electrónico no coincide con la invitación código
// Devuelve un mensaje de error o pide el código de invitación correcto
// …
}