Función de Restablecimiento de Contraseña y Tokens, hacking uuid
Desde el principio, como sabrá, la función de restablecimiento de contraseña es una medida de seguridad que ayuda a un usuario a restablecer su contraseña si la olvida. El proceso generalmente implica enviar un correo electrónico al usuario que contiene un enlace. El enlace también tiene un token para reconocer qué usuario es al hacer clic en él. Por lo tanto, cuando el usuario hace clic en el enlace, se lo dirige a una nueva página donde puede ingresar la contraseña. En este articulo veremos como hacer hacking UUID con la técnica Sandwich attack.
Tokens Únicos y su Importancia
La parte del token debe ser única para cada usuario y, por lo tanto, también incuestionable. Sin embargo, ¿qué pasa si es posible para un atacante generar el token para acceder al restablecimiento de contraseña de nuestra víctima?
Si un enlace contiene un token especial que generalmente no vemos, el token era un uuid. Mientras que los uuid son muy comunes y, a veces, se utilizan para funciones de restablecimiento de contraseña, este uuid en particular es un identificador único que se usa para reconocer una determinada entidad, al igual que cada persona tiene un número de seguro social, cada entidad tiene un uuid. Los uuid generalmente se usan para identificar cosas como archivos de computadoras o registros de bases de datos. Un uso común de los uuid es identificar a un usuario en una base de datos. Hay cinco versiones de los uuid, cada una con sus propios métodos de generación. Las más comunes son V1 y V4. V1 se genera mediante el uso de marcas de tiempo y la dirección MAC, mientras que la versión 4 usa números aleatorios.
Generación de Uuid V1
Entendamos cómo se genera un uuidv1. Aquí hay una ID de UI para reconocer la versión. Simplemente necesitamos identificar el tercer fragmento de la cadena y luego el primer número será la versión del token. La versión 1 usa marcas de tiempo y direcciones MAC para generar el uid. Esto es lo que provoca que el token use un cierto punto en el tiempo para generar el identificador único, y podemos recuperar la marca de tiempo a partir de la identificación generada. Para hacerlo, debemos profundizar más en cómo se construye un uuidv1.
En realidad, hay seis partes: el alto, el medio, el bajo, la versión, el reloj y la dirección MAC. Lo interesante es que el reloj y la dirección MAC están vinculados a una determinada máquina. Esto significa que si una sola máquina genera dos tokens, esta ruta seguirá siendo la misma. Por lo tanto, si tuviéramos que adivinar el resto del token, nos quedaríamos con el alto, el medio y el bajo. ¿Cuáles son esos valores? Si juntamos la altura, el medio y el bajo, en realidad forman un valor hexadecimal. Al convertir este valor a decimal, obtenemos una marca de tiempo en el calendario juliano. ¿Por qué el calendario juliano? Realmente no sé, es súper extraño, pero sí. Nos dio la misma marca de tiempo en el calendario juliano. Con la ayuda de algunas matemáticas realmente complejas, podemos restar la mitad del conjunto entre el calendario juliano y el calendario gregoriano, el que usamos todos los días, y luego se divide por 1000 para obtener una marca de tiempo de Unix. De la marca de tiempo de Unix, podemos obtener directamente la fecha.
Ataque de Sandwich: Obtener el Token de Reinicio
Ahora que entendemos cómo funciona un uidv1, ¿cómo podemos obtener el token de reinicio de una víctima como atacante? Lo interesante es que cuando estaba rastreando en Internet, encontré una publicación de blog llamada «Host Secure iuizes» escrita por el equipo de precio de verso. En el artículo hablan sobre la técnica llamada ataque sándwich y cómo podemos manejar los identificadores únicos de fuerza bruta usándola. Así que aquí está la receta para obtener el control de una cuenta con cero clics usando el ataque de sándwich.
Ataque de Sándwich: Proceso
Para cocinar su ataque de sándwich como atacante, primero debe enviar un restablecimiento de contraseña a su propia cuenta, y esta será la primera capa de pan. Luego podemos configurar un token de restablecimiento para la cuenta de la víctima si conocemos su dirección de correo electrónico, y ese será el garante de su sándwich, el tomate, el jamón y todo. Luego, una vez más, envía otro token de reinicio a su cuenta en la cuenta del atacante, y esa será la capa superior de pan.
Como puede ver, el token de reinicio de su víctima está intercalado y apretado entre sus dos tokens, lo que en realidad le da un rango de tiempo porque tiene dos fluidos con un cierto punto en el tiempo. Básicamente, puede adivinar todas las ID que están entre esos dos. Lo que debe hacer es generar una lista de palabras de todos los uid en el intervalo de tiempo. En resumen, deberá usar la fuerza bruta para todas las posibilidades entre su primer token y su último token.
Ataque de Sándwich: Resultados
En nuestro escenario, teníamos 100,000 posibilidades para la fuerza bruta durante tres días, ya que un token de reinicio duraba tres días. Comenzamos el script por primera vez, y listo, teníamos el token de reinicio de nuestra víctima después de unos momentos de fuerza bruta. De hecho, logramos obtener el control de la cuenta con cero clics. Este año se calificó como alto, y nos pagaron cinco mil dólares. Este es una hamburguesa sabrosa, así que es genial. Realmente me gusta este ataque.
Mitigación de la Vulnerabilidad
Al informar sobre esta vulnerabilidad, debe tener en cuenta que muchas máquinas diferentes pueden generar su uid. Por ejemplo, si tiene como objetivo usar un clúster de Kubernetes con diferentes máquinas, diferentes partes generarán el token, habrá un reloj y una dirección MAC diferentes. Por lo tanto, para cada token en sus cuerpos, en realidad necesitará considerar toda la variación del reloj y la dirección MAC que percibe. Para mi prueba, generamos un par de tokens de reinicio y de los uid que logramos extraer, teníamos 600,000 posibilidades en total a considerar.
Mitigar esta vulnerabilidad es bastante fácil. Solo necesita usar métodos de generación para su token de reinicio que tengan mucha más entropía. Puede usar librerías que utilicen funciones criptográficas sólidas para generar los tokens. Además, puede agregar otra capa de seguridad ejecutándolos a través de un hash SHA-256.
En resumen, es importante tomar medidas para garantizar que los tokens de reinicio sean lo más seguros posible y que no se puedan predecir fácilmente mediante ataques como el ataque de sándwich. Esto incluye utilizar métodos de generación seguros y aumentar la entropía de los tokens para hacer que sean más difíciles de adivinar mediante fuerza bruta. Si sigue buenas prácticas de seguridad en la generación y gestión de tokens de reinicio, puede mitigar eficazmente esta vulnerabilidad.