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

158 lines
9.4 KiB
Markdown
Raw Normal View History

# 2FA/OTP Bypass
2023-06-05 18:33:24 +00:00
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-06-05 18:33:24 +00:00
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>
## **Bypass de autenticación de dos factores**
### **Bypass directo**
2023-06-05 18:33:24 +00:00
Para hacer bypass de 2FA, simplemente **intenta acceder directamente al siguiente endpoint** (necesitas conocer la ruta del siguiente endpoint). Si esto no funciona, intenta cambiar el **encabezado Referrer** como si vinieras de la página de 2FA.
2023-06-05 18:33:24 +00:00
### **Reutilización de token**
2023-06-05 18:33:24 +00:00
Quizás puedas reutilizar un token previamente usado dentro de la cuenta para autenticarte.
2023-06-05 18:33:24 +00:00
### Compartir tokens no utilizados
2023-06-05 18:33:24 +00:00
Verifica si puedes obtener el token de tu cuenta e intenta usarlo para hacer bypass del 2FA en una cuenta diferente.
2023-06-05 18:33:24 +00:00
### Token filtrado
2023-06-05 18:33:24 +00:00
¿Está el token filtrado en una respuesta de la aplicación web?
2023-06-05 18:33:24 +00:00
### Enlace de verificación de correo electrónico
2023-06-05 18:33:24 +00:00
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 ([post](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)).
2023-06-05 18:33:24 +00:00
### Permiso de sesión
2023-06-05 18:33:24 +00:00
Usando la misma sesión, inicia el flujo usando tu cuenta y la cuenta de la víctima. Al llegar 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 back-end solo estableció un booleano dentro de tus sesiones indicando que has pasado exitosamente el 2FA, podrás hacer bypass del 2FA de la víctima.
2023-06-05 18:33:24 +00:00
### **Función de restablecimiento de contraseña**
2023-06-05 18:33:24 +00:00
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 completa 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 quieras** (incluso si la víctima cambia su dirección de correo electrónico).
2023-06-05 18:33:24 +00:00
Otra opción para hacer bypass de 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**, podría ser posible que después de un cambio de contraseña no se use el 2FA.
### OAuth
2023-06-05 18:33:24 +00:00
Si puedes comprometer la cuenta del usuario en una plataforma **OAuth** de confianza (Google, Facebook...)
2023-06-05 18:33:24 +00:00
### Fuerza bruta
2023-06-05 18:33:24 +00:00
#### Falta de límite de tasa
2023-06-05 18:33:24 +00:00
¿Hay algún límite en la cantidad de códigos que puedes intentar, para que puedas simplemente forzarlo por fuerza bruta? Ten cuidado con un posible límite de tasa "silencioso", siempre intenta varios códigos y luego el real para confirmar la vulnerabilidad.
2023-06-05 18:33:24 +00:00
#### Límite de tasa en el flujo pero sin límite de tasa
2023-06-05 18:33:24 +00:00
En este caso, hay un límite de tasa en el flujo (tienes que forzarlo muy lentamente: 1 hilo y algo de sueño antes de 2 intentos) pero no hay límite de tasa. Entonces, con suficiente tiempo, podrás encontrar el código válido.
2023-06-05 18:33:24 +00:00
#### Reenviar código y restablecer el límite
2023-06-05 18:33:24 +00:00
Hay un límite de tasa pero cuando "reenvías el código" se envía el mismo código y el límite de tasa se restablece. Entonces, puedes forzar el código mientras lo reenvías para que el límite de tasa nunca se alcance.
2023-06-05 18:33:24 +00:00
#### Bypass del límite de tasa del lado del cliente
2023-06-05 18:33:24 +00:00
{% content-ref url="rate-limit-bypass.md" %}
[rate-limit-bypass.md](rate-limit-bypass.md)
{% endcontent-ref %}
#### Falta de límite de tasa en la cuenta del usuario
2023-06-05 18:33:24 +00:00
A veces puedes configurar el 2FA para algunas acciones dentro de tu cuenta (cambiar correo, contraseña...). Sin embargo, incluso en casos donde hay un límite de tasa cuando intentaste iniciar sesión, no hay ningún límite de tasa para proteger acciones dentro de la cuenta.
2023-06-05 18:33:24 +00:00
#### Falta de límite de tasa reenviando el código vía SMS
No podrás hacer bypass del 2FA pero podrás gastar el dinero de la empresa.
#### Regeneración infinita de OTP
Si puedes **generar un nuevo OTP infinitas veces**, el OTP es **suficientemente simple** (4 números), y puedes intentar hasta 4 o 5 tokens por OTP generado, puedes simplemente intentar los mismos 4 o 5 tokens cada vez y generar OTPs hasta que coincida con los que estás usando.
### Condición de carrera
Revisa la sección sobre bypass de 2FA de la siguiente página:
{% content-ref url="race-condition.md" %}
[race-condition.md](race-condition.md)
{% endcontent-ref %}
### CSRF/Clickjacking
Verifica si hay una vulnerabilidad de Falsificación de Solicitud en Sitios Cruzados (CSRF) o de Clickjacking para desactivar el 2FA.
### Funcionalidad de "recordarme"
#### Cookie adivinable
2023-06-05 18:33:24 +00:00
Si la funcionalidad de "recordarme" usa una nueva cookie con un código adivinable, intenta adivinarlo.
2023-06-05 18:33:24 +00:00
#### Dirección IP
2023-06-05 18:33:24 +00:00
Si la funcionalidad de "recordarme" está vinculada a tu dirección IP, puedes intentar averiguar la dirección IP de la víctima e impersonarla usando el encabezado **X-Forwarded-For**.
### Versiones anteriores
2023-06-05 18:33:24 +00:00
#### Subdominios
2023-06-05 18:33:24 +00:00
Si puedes encontrar algunos subdominios de "pruebas" con la funcionalidad de inicio de sesión, podrían estar usando versiones antiguas que no admiten 2FA (por lo que se hace bypass directamente) o esos endpoints podrían admitir una versión vulnerable del 2FA.
2023-06-05 18:33:24 +00:00
#### APIs
2023-06-05 18:33:24 +00:00
Si encuentras que el 2FA está usando una API ubicada bajo un directorio /v\*/ (como "/v3/"), esto probablemente significa que hay endpoints de API más antiguos que podrían ser vulnerables a algún tipo de bypass de 2FA.
2023-06-05 18:33:24 +00:00
### Sesiones anteriores
2023-06-05 18:33:24 +00:00
Cuando se habilita el 2FA, las sesiones creadas anteriormente deberían 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á.
2023-06-05 18:33:24 +00:00
### Control de acceso inadecuado a códigos de respaldo
2023-06-05 18:33:24 +00:00
Los códigos de respaldo se generan inmediatamente después de que se habilita el 2FA y están disponibles en una sola solicitud. Después de cada llamada subsiguiente a la solicitud, los códigos pueden regenerarse o permanecer sin cambios (códigos estáticos). Si hay configuraciones erróneas de CORS/vulnerabilidades de XSS y otros errores que te permiten "extraer" códigos de respaldo de la solicitud de respuesta del endpoint de códigos de respaldo, entonces el atacante podría robar los códigos y hacer bypass del 2FA si se conocen el nombre de usuario y la contraseña.
2023-06-05 18:33:24 +00:00
### Divulgación de información
2023-06-05 18:33:24 +00:00
Si notas que aparece alguna información confidencial en la página de 2FA que no conocías previamente (como el número de teléfono), entonces esto puede considerarse 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 de 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 pide que ingreses un código de 2FA, puedes reportarlo.
## 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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>