Reports

CSRF: qué es, cuándo es explotable y cómo se evita

Guía en castellano sobre cross-site request forgery (CSRF): cómo funciona, por qué SameSite no lo resuelve todo, cómo se prueba en bug bounty y cómo se corrige.

Qué es

En un CSRF (Cross-Site Request Forgery) una web maliciosa hace que tu navegador envíe una petición a otra web en la que tienes la sesión abierta. Como el navegador adjunta tus cookies automáticamente, la web atacada cree que la petición la has hecho tú: cambiar el correo, transferir dinero o borrar algo.

Para que funcione hacen falta tres cosas: una acción interesante, que la sesión dependa solo de cookies y que la petición no lleve nada que el atacante no pueda adivinar.

Dónde suele aparecer

  • Cambios de correo, contraseña o datos de recuperación (la puerta a tomar la cuenta).
  • Acciones con GET que modifican datos, que se pueden lanzar hasta con una imagen.
  • Endpoints que aceptan el mismo dato como formulario aunque la aplicación envíe JSON.
  • Inicio de sesión y vinculación de cuentas, donde el ataque te mete en la cuenta del atacante.

Cómo se prueba

  1. Busca acciones que cambien el estado y mira qué protección llevan: un token en el formulario, una cabecera personalizada o nada.
  2. Quita el token, déjalo vacío o pon el de otra sesión, y comprueba si la acción se ejecuta igual.
  3. Prueba a cambiar el método (POST a GET) o el tipo de contenido (JSON a formulario).
  4. Revisa el atributo SameSite de las cookies: con Lax (valor por defecto en muchos navegadores) la mayoría de peticiones POST desde otra web ya no llevan cookies, pero las GET de navegación sí.
  5. Prepara una página HTML mínima que envíe la petición y ábrela con tu propia sesión.

Cómo se evita

  • Un token aleatorio por sesión en cada formulario o petición que modifique datos, comprobado en el servidor.
  • Cookies de sesión con SameSite=Lax o Strict como protección adicional.
  • Comprobar las cabeceras Origin o Sec-Fetch-Site en las peticiones que cambian algo.
  • No modificar nunca datos en respuestas a GET.

Al reportarlo

Incluye la página de prueba y explica el efecto real. Los programas suelen descartar CSRF en acciones sin impacto (por ejemplo, cerrar sesión), así que céntrate en las que cambian algo importante.