¿Qué es el Cross-site request forgery o CSRF?

Publicado el en la categoría Diseño y Programación, General, Seguridad

Los ataques del tipo Cross-site Request Forgery, o CSRF, consisten en forzar a un usuario a ejecutar peticiones no deseadas a una web en la que están autentificados sin que este se de cuenta. Este tipo de ataque no busca el robo de datos, si no el que estas peticiones provoquen cambios, ya que el atacante no tiene forma de ver la respuesta a estas peticiones falsas.csrf

Si la víctima se trata de un usuario normal, estas peticiones falsas pueden limitarse a por ejemplo enviar fondos a otra cuenta, cambiar el correo de contacto o la contraseña de acceso, y otras acciones que según el tipo de web pueden llegar a ser muy dañinas para la víctima. Sin embargo, si la víctima cuenta con privilegios administrativos, la web en su totalidad está comprometida, pudiendo causar daños muy graves e irreparables.

En este tipo de ataques, es necesaria la utilización de ingeniería social para engañar a la víctima y provocar que ejecute la petición falsa, por ejemplo enviando un link por email:

<a href="http://banco.com/transferir.php?cuenta=juan&cantidad=10000">Ver fotos</a>

Si la víctima recibe este enlace, lo abre y está autentificada en la página pero esta no está preparada para evitar ataques CSRF, transferiría a la cuenta “juan” la cantidad indicada.

No sólo es posible realizar este ataque mediante peticiones GET, también es posible con peticiones POST, si el atacante coloca un formulario malicioso en una web y logra que la víctima acceda y lo ejecute.

<form action="http://banco.com/transferir.php" method="POST">
<input type="hidden" name="cuenta" value="juan"/>
<input type="hidden" name="cantidad" value="10000"/>
<input type="submit" value="Ver fotos"/>
</form>

La víctima vería un formulario pero no vería los dos campos ocultos ni a dónde se envía la información, siendo inconsciente de que transferiría la cantidad indicada a otra cuenta. En los dos ejemplos el atacante transfiere dinero, pero podría realizar cualquier otra acción como cambiar la contraseña de acceso de la víctima, eliminar registros, realizar compras, etc.

La técnica más comun para asegurar nuestra web contra este tipo de ataques y que nuestros usuarios no se conviertan en víctimas, es mediante el uso de tokens o identificadores únicos, generados de forma aleatoria y asociados a la sesión del usuario, que son insertados como campos ocultos en los formularios y añadidos en los enlaces para las acciones  que se puedan considerar “sensibles”. Cuando el usuario realiza una de estas operaciones, el servidor comprueba que el token enviado es correcto, permitiendo que se ejecute la operación, o cancelándola en caso de que sea incorrecto, de forma que nos aseguramos de que sea el usuario legítimo quien realmente ha hecho la petición, ya que es imposible para el atacante conocer el token de su víctima.

Hoy en día cualquier CMS moderno cuenta con medidas de protección contra los ataques CSRF, pero es esencial mantener las versiones siempre a la última para obtener las correcciones de fallos de seguridad. En caso de no usar un CMS y usar programación propia, es muy recomendable implementar medidas para proteger a los usuarios contra este tipo de ataque.

Podemos obtener información más a fondo sobre las vulnerabilidades CSRF en la wiki de OWASP, así como leer su gúia detallada para la prevención contra estos ataques.

Facebooktwittergoogle_plus