hacktricks/pentesting-web/2fa-bypass.md

152 lines
10 KiB
Markdown

# Bypass de 2FA/OTP
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## **Bypass de autenticación de dos factores**
### **Bypass directo**
Para saltarse el 2FA, simplemente **intenta acceder directamente al siguiente punto final** (necesitas conocer la ruta del siguiente punto final). Si esto no funciona, intenta cambiar el **encabezado Referrer** como si vinieras de la página de 2FA.
### **Reutilización de token**
Tal vez puedas reutilizar un token previamente utilizado dentro de la cuenta para autenticarte.
### Compartir tokens no utilizados
Verifica si puedes obtener el token de tu cuenta y trata de usarlo para saltarte el 2FA en una cuenta diferente.
### Token filtrado
¿Se filtró el token en una respuesta de la aplicación web?
### Enlace de verificación de correo electrónico
Intenta usar el **enlace de verificación de correo electrónico recibido cuando se creó la cuenta** para ver si, incluso si se configuró el 2FA, aún puedes acceder a tu perfil solo con ese enlace ([publicación](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)).
### Permiso de sesión
Usando la misma sesión, inicia el flujo utilizando tu cuenta y la cuenta de la víctima. Cuando llegues al punto de 2FA en ambas cuentas, completa el 2FA con tu cuenta pero no accedas a la siguiente parte. En lugar de eso, intenta acceder al siguiente paso con el flujo de la cuenta de la víctima. Si el backend solo establece un booleano dentro de tus sesiones diciendo que has pasado el 2FA con éxito, podrás saltarte el 2FA de la víctima.
### Función de restablecimiento de contraseña
En casi todas las aplicaciones web, la **función de restablecimiento de contraseña inicia sesión automáticamente** al usuario en la aplicación después de que se complete el procedimiento de restablecimiento.\
Verifica si se envía un **correo** con un **enlace** para **restablecer la contraseña** y si puedes **reutilizar** ese **enlace** para restablecer la contraseña tantas veces como desees (incluso si la víctima cambia su dirección de correo electrónico).
Otra opción para saltarse el 2FA con la funcionalidad de restablecimiento de contraseña es **restablecer la contraseña con acceso al correo** y usar la **nueva contraseña para iniciar sesión**, es posible que después de un cambio de contraseña no se use el 2FA.
### OAuth
Si puedes comprometer la cuenta del usuario en una plataforma de **OAuth** confiable (Google, Facebook...)
### Fuerza bruta
#### Falta de límite de velocidad
¿Hay algún límite en el número de códigos que puedes probar, para que puedas simplemente hacer fuerza bruta? Ten cuidado con un posible límite de velocidad "silencioso", siempre prueba varios códigos y luego el real para confirmar la vulnerabilidad.
#### Límite de flujo pero sin límite de velocidad
En este caso, hay un límite de flujo (tienes que hacer fuerza bruta muy lentamente: 1 hilo y algo de espera antes de 2 intentos) pero no hay límite de velocidad. Entonces, con suficiente tiempo, podrás encontrar el código válido.
#### Reenviar el código y restablecer el límite
Hay un límite de velocidad, pero cuando "reenvías el código", se envía el mismo código y se restablece el límite de velocidad. Entonces, puedes hacer fuerza bruta en el código mientras lo reenvías para que nunca se alcance el límite de velocidad.
#### Bypass del límite de velocidad del lado del cliente
{% content-ref url="rate-limit-bypass.md" %}
[rate-limit-bypass.md](rate-limit-bypass.md)
{% endcontent-ref %}
#### Falta de límite de velocidad en la cuenta del usuario
A veces puedes configurar el 2FA para algunas acciones dentro de tu cuenta (cambiar correo, contraseña...). Sin embargo, incluso en los casos en que hay un límite de velocidad cuando intentas iniciar sesión, no hay ningún límite de velocidad para proteger las acciones dentro de la cuenta.
#### Falta de límite de velocidad al reenviar el código por SMS
No podrás saltarte el 2FA, pero podrás hacer que la empresa gaste dinero.
#### Regeneración infinita de OTP
Si puedes **generar un nuevo OTP infinitas veces**, el OTP es lo suficientemente **simple** (4 números) y puedes probar hasta 4 o 5 tokens por OTP generado, simplemente prueba los mismos 4 o 5 tokens cada vez y genera OTP hasta que coincida con los que estás usando.
### Condición de carrera
Consulta la sección sobre el bypass de 2FA en la siguiente página:
{% content-ref url="race-condition.md" %}
[race-condition.md](race-condition.md)
{% endcontent-ref %}
### CSRF/Clickjacking
Verifique si existe una vulnerabilidad de Cross Site Request Forgery (CSRF) o Clickjacking para desactivar el 2FA.
### Funcionalidad de "Recuérdame"
#### Cookie adivinable
Si la funcionalidad de "recuérdame" utiliza una nueva cookie con un código adivinable, intente adivinarlo.
#### Dirección IP
Si la funcionalidad de "recuérdame" está vinculada a su dirección IP, puede intentar averiguar la dirección IP de la víctima e impersonarla utilizando el encabezado **X-Forwarded-For**.
### Versiones antiguas
#### Subdominios
Si puede encontrar algunos subdominios de "pruebas" con la funcionalidad de inicio de sesión, es posible que estén utilizando versiones antiguas que no admiten 2FA (por lo que se omite directamente) o esos puntos finales podrían admitir una versión vulnerable del 2FA.
#### APIs
Si descubre que el 2FA utiliza una API ubicada en un directorio /v\* (como "/v3/"), esto probablemente significa que hay puntos finales de API antiguos que podrían ser vulnerables a algún tipo de bypass de 2FA.
### Sesiones anteriores
Cuando se habilita el 2FA, las sesiones anteriores creadas deben finalizarse. Esto se debe a que cuando un cliente tiene su cuenta comprometida, podría querer protegerla activando el 2FA, pero si las sesiones anteriores no se finalizan, esto no lo protegerá.
### Control de acceso inadecuado a códigos de respaldo
Los códigos de respaldo se generan inmediatamente después de habilitar el 2FA y están disponibles en una sola solicitud. Después de cada llamada posterior a la solicitud, los códigos pueden regenerarse o permanecer sin cambios (códigos estáticos). Si existen configuraciones incorrectas de CORS/vulnerabilidades de XSS y otros errores que permiten "extraer" códigos de respaldo de la solicitud de respuesta del punto final del código de respaldo, entonces el atacante podría robar los códigos y evadir el 2FA si se conocen el nombre de usuario y la contraseña.
### Divulgación de información
Si nota que aparece información confidencial en la página de 2FA que no conocía previamente (como el número de teléfono), esto se puede considerar una vulnerabilidad de divulgación de información.
### **Restablecimiento de contraseña == desactivar 2FA**
1. Crea una cuenta y activa el 2FA.
2. Cierra sesión en esa cuenta.
3. Ahora, ve a la página de restablecimiento de contraseña olvidada.
4. Cambia tu contraseña.
5. Ahora intenta iniciar sesión.
6. Si no se te solicita ingresar un código de 2FA, puedes informarlo.
## Referencias
{% embed url="https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35" %}
{% embed url="https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>