[ES] One-Click Account Takeover vía OTP Bypass y CSRF
Vulnerability Summary
Este writeup detalla una vulnerabilidad crítica de lógica de negocio en el flujo de cambio de correo electrónico de una plataforma. Mediante la combinación de un OTP Bypass y un CSRF, fue posible reemplazar el correo de cualquier usuario de forma arbitraria con un solo clic, logrando así un Account Takeover (ATO) completo.
Nota: Todos los datos que expongan la identidad real de la empresa o los endpoints han sido sustituidos por entornos y valores ficticios (
api.example.com) para proteger la confidencialidad.
Este writeup detalla una vulnerabilidad crítica de lógica de negocio en el flujo de cambio de correo electrónico de una plataforma. Mediante la combinación de un OTP Bypass y un CSRF, fue posible reemplazar el correo de cualquier usuario de forma arbitraria con un solo clic, logrando así un Account Takeover (ATO) completo.
Análisis de la Vulnerabilidad
El fallo residía en cómo el servidor gestionaba la solicitud de cambio de correo electrónico, la cual requería de la validación mediante un código OTP enviado a la nueva dirección. El endpoint responsable era:
https://api.example.com/user/userAction!modifyEmail.action?email=[NUEVO_EMAIL]&checkcode=[OTP]
La explotación fue posible debido a dos deficiencias críticas concurrentes en este endpoint:
- Reutilización Global de OTP (OTP Bypass): El servidor verificaba matemáticamente que el código numérico (
checkcode) fuera válido para el correo proporcionado (email), pero no validaba a qué sesión de usuario ni a qué funcionalidad pertenecía dicho código. Esto permitía al atacante generar un OTP válido usando un flujo propio y neutral, y consumirlo legítimamente en la sesión de otra cuenta. - Cross-Site Request Forgery (CSRF): El endpoint aceptaba que la acción crítica (cambiar el correo de la cuenta) se realizase a través de una petición HTTP
GETpasándole los parámetros en crudo por la URL. Además, carecía de validación de tokens Anti-CSRF o cabeceras (como Origin/Referer) que certificaran la intencionalidad de la víctima.
Flujo de Explotación
La cadena de ataque procedía paso a paso de la siguiente forma:
- Captura del OTP: El atacante solicita un código de verificación hacia su propio correo electrónico (
atacante@evil.com) desde un panel genérico (como el registro de nueva cuenta), obteniendo un OTP válido enviado a su propia bandeja de entrada (por ejemplo:123456). - Construcción del Vector CSRF: El atacante elabora su payload armando una URL maliciosa que apunta al endpoint de cambio de correo, inyectando su email y su propio código OTP recién obtenido: