El nuevo atributo SameSite para crear cookies más seguras

27 de agosto de 2018

Los navegadores envían las cookies en todas las peticiones que realizan a los servidores. Los atacantes aprovechan este comportamiento para realizar acciones en tu nombre en sitios en los que estás logueado sin que te des cuenta.

Imagina por ejemplo que visitas un foro de Internet en el que los usuarios pueden añadir imágenes en su firma. Un atacante podría añadir algo como lo siguiente:

<img src="https://el-sitio-web-de-un-banco.com/transferir?cantidad=1000&receptor=usuario_malicioso">

La imagen no es realmente una imagen, sino una URL que hace que tu navegador realice una petición HTTP al sitio web de ese banco. Si eres cliente del banco y te logueaste con anterioridad, es posible que en tu navegador tengas alguna cookie del banco, que se enviará junto con la petición, lo que podría crearte problemas.

Lamentablemente las aplicaciones web no pueden diferenciar las peticiones HTTP legítimas (las que tu realizas de manera consciente) y las ilegítimas (las que realiza un atacante en tu nombre mediante engaños). Por todo ello, en el RFC 6265 se ha definido un nuevo atributo para las cookies llamado same-site y que puede tener los siguientes valores:

  • same-site: strict, no envía ninguna cookie en las peticiones que se realizan desde sitios diferentes a donde se originaron.
  • same-site: lax, similar al modo strict, pero las cookies si que se envían cuando es el usuario el que realiza la petición externa de manera consciente, por ejemplo al pinchar en un enlace o enviar un formulario que use el método GET de HTTP.

El modo strict es el más seguro para el usuario, pero puede romper algunas aplicaciones existentes. El modo lax se ha definido como una solución temporal de compromiso hasta que las aplicaciones se puedan actualizar para funcionar bien con el modo strict.

En el ejemplo anterior, si el banco añade el atributo same-site: strict a sus cookies, cuando el usuario visite el foro con esa imagen maliciosa, las cookies del banco no se enviarán y no habrá ningún problema. Sin embargo, si el banco añade el atributo same-site: lax, la imagen maliciosa seguirá sin conseguir que se envíen las cookies, pero si el usuario pincha en cualquier enlace del foro que apunte al sitio web del banco, entonces las cookies si que se envían.

El soporte del atributo same-site es generalizado en la mayoría de navegadores modernos, por lo que ya puedes usarlo en tus aplicaciones.