Las Cookies son un fragmento de la información intercambiada entre la página web y el navegador del usuario que permite recordar los datos de acceso del usuario al sitio web a través del protocolo HTTP.
Los principales objetivos de las cookies son, en primer lugar, la gestión de sesiones, en segundo lugar, las preferencias del usuario y por otro lado, el rastreo, almacenamiento y análisis del comportamiento de quien accede al sitio web.
Estas se envían con cada solicitud del navegador y hoy en día los navegadores como Chrome, Firefox y Edge ya han ajustado sus funcionalidades según las propuestas de IEFT para mejora de la seguridad de la información que gestionan las cookies en la navegación web.
A continuación la configuración para las respuestas de Cookies HTTP seguras y mitigar ataques.
1. Asegurar Set-Cookie
Las cabeceras de respuesta HTTP se configuran con la directiva Set-Cookie y solamente se deberían enviar al servidor en peticiones cifradas mediante el protocolo HTTPS y nunca almacenar información sensible.
Sintaxis general para configuración en Apache
Set-Cookie:=< cookie-value> Set-Cookie: =< cookie-value>; Expires=< date> Set-Cookie: =< cookie-value>; Max-Age=< non-zero-digit> Set-Cookie: =< cookie-value>; Domain=< domain-value> Set-Cookie: =< cookie-value>; Path=< path-value>
Podemos indicar estas repuestas por cookie o utilizar una variable general para incluir a todas las cookies de nuestro sitio, como por ejemplo:
Set-Cookie ^(.*)$ $1;
A partir de estas los parámetros se aplicarán a todas las cookies de nuestro sitio, por ejemplo:
Set-Cookie ^(.*)$ "$1; Domain=ericaaguado.es;
Existen diferentes mecanismos para modificar el contenido de una cookie para conseguir así información no autorizada, realizar robos de identidad o sesiones e incluso inyectar códigos maliciosos y modificar datos del sitio web. Entre ellos los más conocidos métodos son las técnicas de falsificación de peticiones o en inglés Cross Site Request Forgery (CSRF o XSRF) o las técnicas de inyección de código malicioso o en inglés Cross-site scripting (XSS).
2. Proteger Cookies contra XSS:
Para ello necesitamos añadir el parámetro de Cookie HttpOnly y así conseguimos evitar que códigos JavaScript accedan a las cookies, lo que mitigará los ataques contras scripts cross-site XSS.
Los parámetros a incluir son:
- HttpOnly -> Impide acceder a la cookie a través del script y desde el lado del cliente, incluso si hay una vulnerabilidad que lo permita.
- Secure -> Impide establecer cookies en peticiones inseguras, por lo que solamente se aceptarán por https.
Ejemplo de Sintaxi para Apache:
Header edit Set-Cookie ^(.*)$ $1; Domain=ericaaguado.es; HttpOnly; Secure; Header always edit Set-Cookie ^(.*)$ $1; Domain=ericaaguado.es; HttpOnly; Secure;
3. Proteger Cookies contra CSRF:
Estos ataques aprovechan las cookies de inicio de sesión para falsificar las solicitudes entre sitios web, por lo que podemos controlar desde donde se permiten estas solicitudes.
Los parámetros a incluir son:
- SameSite = Strict -> Permite la navegación solamente cuando la cookie se envia desde el propio dominio o dominio original. Por lo que si se intenta acceder desde otro dominio a través de una url que redirige esta cookie quedará bloqueada.
- SameSite = None -> Deshabilita la funcionalidad de protección por lo que se podrá realizar ataques de cross-site. Además se debe añadir el parámetro Secure ya que sino esta cookie será rechazada.
- SameSite = Lax -> Permite el envío de cookies desde peticiones cross-site, como las peticiones a imágenes o frames, que redirijan desde la url del sitio a una url externa, por ejemplo siguiendo un enlace de login hacia otro sitio.
Ejemplo de Sintaxis para Apache:
Header edit Set-Cookie ^(.*)$ $1; Domain=ericaaguado.es; SameSite=strict; Header always Set-Cookie ^(.*)$ $1; Domain=ericaaguado.es; SameSite=strict;
Existe una multitud de parámetros y variables que podemos configurar para centrar al máximo el control de nuestras cookies y así asegurar al máximo nuestro sitio contra este tipo de ataques. Podemos configurar estas directivas en la misma cabecera de respuesta apache dentro del mod_headers.so en el fichero de configuración de apache y luego reiniciar el servicio para aplicar los cambios.
4. Ejemplo para Apache:
Header edit Set-Cookie ^(.*)$ $1; Domain=ericaaguado.es; HttpOnly; Secure; SameSite=strict;