Introducción a CSRF: falsificación de solicitudes entre sitios

Hoy vamos a hablar de un tipo de vulnerabilidad muy común y bastante utilizada para hackear sitios web: CSRF o Cross-Site Request Forgery.

¿Qué es CSRF?

CSRF, o falsificación de solicitudes entre sitios, es una técnica que permite a los ciberdelincuentes llevar a cabo acciones no deseadas en nombre de la víctima.

Por ejemplo: un ciberdelincuente que cambia tu contraseña o transfiere dinero de tu cuenta bancaria sin tu permiso.

¡Suena loco y genial! Pero, ¿cómo es posible este ataque? Antes de sumergirnos en los mecanismos de un ataque CSRF, debemos comprender cómo los sitios web autentican a sus usuarios.

¿Cómo sabe Twitter que soy yo?

¿Alguna vez te has preguntado: ¿cómo te reconocen los sitios web? ¿Por qué no necesito iniciar sesión en Twitter cada vez que reviso mi cuenta? Cuando twitteo algo, ¿cómo sabe Twitter que soy yo sin tener que pedirme nuevamente mi contraseña?

Una vez que inicias sesión en un sitio web, el navegador que estás utilizando almacena las cookies de sesión para ese sitio web y las envía automáticamente cada vez que se comunica con el sitio.

Por ejemplo, después de iniciar sesión en Twitter, Twitter emite una cookie de sesión para tu cuenta. Esa cookie de sesión te autentica en el sitio web. El navegador que estás utilizando recibe la cookie de sesión, la almacena y la envía junto con cada solicitud a Twitter.

Esto te permite acceder a información confidencial solo disponible para ti y realizar acciones que solo tú deberías poder hacer, como leer tus mensajes privados y cambiar la información de tu cuenta.

Por lo tanto, cuando envías un Tweet al mundo: tu navegador envía una solicitud a Twitter con tu cookie de sesión, comprobando tu identidad, verificando así que estás autorizado a enviar el Tweet como tu nombre de usuario.

Digamos que el formulario HTML “Enviar un Tweet” se ve así: (Esta no es la solicitud real utilizada por Twitter y la funcionalidad de Twitter “Send a Tweet” no es realmente vulnerable a los ataques CSRF).

Una vez que hagas clic en “submit” en la página, tu navegador enviará una solicitud a https://twitter.com/send_a_tweet con tu cookie de sesión, y enviará un tweet en tu nombre. Ahora, ¿puedes detectar el problema con esta funcionalidad?

Esto está mal …

Un formulario HTML simple como el anterior es vulnerable porque cualquier sitio puede enviar la misma solicitud, no solo twitter.com.

Imagina a un atacante que aloja su propio sitio web y, en su sitio, aloja un formulario HTML invisible y enviado automáticamente como este:

Dado que los navegadores incluyen cookies de sesión automáticamente con cada solicitud, y esta solicitud va a twitter.com, el navegador incluirá tus credenciales de Twitter cuando este formulario se envíe automáticamente.

Twitter verá entonces la solicitud como válida ya que incluyó tus credenciales reales de Twitter. El Tweet pasará y te habrás visto obligado a tuitear: ¡Sigue a@ vickieli7 en Twitter! cada vez que visitas la página maliciosa.

Siendo realistas, una página HTML maliciosa se vería así: el formulario está oculto a la vista del usuario y Javascript se usa para enviar el formulario sin la necesidad de interacción del usuario.

Cómo protegerse contra los ataques CSRF

Desafortunadamente, las vulnerabilidades CSRF siguen siendo extremadamente comunes en la naturaleza. Los sitios web de grandes corporaciones como Starbucks y Uber se han encontrado vulnerables a este tipo de ataque.

Si bien los desarrolladores pueden hacer todo lo posible para proteger sus sitios web, nosotros como usuarios también podemos tomar medidas para minimizar el riesgo de un ataque CSRF.

Aquí hay algunos pasos que puede seguir para minimizar tu riesgo:

  • Cerrar la sesión de los sitios después de usarlos: los ataques CSRF dependen de que la víctima tenga una sesión válida para un sitio en particular.

Cuando cierras sesión, invalidas la sesión en ese sitio, sin dejar sesiones para que el hacker las explote. (Las cookies almacenadas en tu navegador ya no funcionarán).

  • Usar un navegador diferente para sitios sensibles: los ataques CSRF también dependen del navegador de la víctima que almacena las credenciales del sitio web vulnerable.

Al usar navegadores separados para actividades delicadas (como sitios bancarios) y navegación informal, puedes asegurarte de que, si te encuentras con una página de explotación CSRF durante la navegación habitual, el navegador que estás utilizando no tendrá las credenciales para sitios sensibles.

  • Usar un bloqueador de Javascript: JavaScript se usa a menudo para enviar automáticamente los formularios utilizados para aprovechar una vulnerabilidad CSRF. Al deshabilitar Javascript en tu navegador o cliente de correo electrónico, esencialmente haces que los formularios de envío automático sean inútiles.

De esta manera, los ataques CSRF se volverían más difíciles ya que los atacantes tendrían que engañarte para que envíes el formulario manualmente.