El Cross-site Request Forgery, también conocida como CSRF, es un ataque por el que un atacante engaña a una víctima para que realice acciones en su nombre. El impacto del ataque depende del nivel de permisos que tenga la víctima. Estos ataques se aprovechan del hecho de que un sitio web confía completamente en un usuario una vez que puede confirmar que el usuario es realmente quien dice ser.
A menudo no se le da la importancia que deberia , a pesar de que puede ser un ataque sigiloso y poderoso si se ejecuta correctamente. También es un ataque común, por lo que tiene un lugar en la lista OWASP Top 10. Sin embargo, una vulnerabilidad Cross-site Scripting (XSS) explotada es un riesgo mayor que cualquier vulnerabilidad CSRF porque los ataques CSRF tienen una limitación importante.
Hay dos pasos importante para le ejecucion de dicha vulnerabilidad. La primera consiste en engañar a la víctima para que haga clic en un enlace. Esto se hace normalmente a través de ingeniería social y enlaces maliciosos. La segunda parte consiste en enviar una solicitud falsa, de aspecto legítimo, desde el navegador de la víctima al sitio web. La petición se envía con los valores elegidos por el atacante, incluyendo cualquier cookie que la víctima haya asociado a ese sitio web. De esta manera, el sitio web sabe que esta víctima puede realizar ciertas acciones en el sitio web. Cualquier petición enviada con estas credenciales HTTP se considerarán legítima, aunque la víctima esté enviando la petición por orden del atacante.
Cuando se realiza una solicitud a un sitio web, el navegador de la víctima comprueba si tiene alguna cookie asociada al origen de ese sitio web y que deba enviarse con la solicitud HTTP. Si es así, estas cookies se incluyen El sitio web es incapaz de distinguir entre las solicitudes enviadas por el atacante y las enviadas por la víctima, ya que las solicitudes se envían siempre desde el navegador de la víctima con su propia cookie. Un ataque CSRF simplemente se aprovecha del hecho de que el navegador envía la cookie al sitio web automáticamente con cada solicitud.
El Cross-site Request Forgery sólo será efectiva si la víctima está autenticada. Esto significa que la víctima debe estar conectada para que el ataque tenga éxito. Dado que los ataques CSRF se utilizan para eludir el proceso de autenticación, puede haber algunos elementos que no se vean afectados por estos ataques aunque no estén protegidos contra ellos, como el contenido de acceso público. Por ejemplo, un formulario de contacto público en un sitio web está a salvo de CSRF. Estos formularios HTML no requieren que la víctima tenga ningún privilegio para el envío del formulario. El CSRF sólo se aplica a situaciones en las que la víctima puede realizar acciones que no son accesibles para todo el mundo.
tenemos un sitio www.example.com que procesa las transferencias de fondos mediante una solicitud GET (algo que no debe hacerse en casos reales) que incluye dos parámetros: la cantidad que se va a transferir y el identificador de la persona que va a recibir la transferencia de dinero. El siguiente ejemplo muestra una URL legítima, que solicitará que la aplicación web transfiera 100.000 unidades de la moneda correspondiente a la cuenta de Fred.
www.example.com procesara las transferencias de fondos mediante una solicitud GET que incluye dos parámetros: la cantidad que se va a transferir y el identificador de la persona que va a recibir la transferencia de dinero. El siguiente ejemplo muestra una URL legítima, que solicitará que la aplicación web transfiera 100.000 unidades de la moneda correspondiente a la cuenta de Fred.
Si la aplicación explotada espera una petición GET, el atacante puede incluir una etiqueta maliciosa en su propio sitio web. En lugar de enlazar a una imagen, esta etiqueta envía una solicitud a la aplicación web del banco:
En circunstancias normales, el navegador del usuario envía automáticamente cookies relacionadas con ese sitio web. Esto hace que la víctima realice un cambio de estado en nombre del atacante. En este caso, el cambio de estado es una transferencia de fondos.
este ejemplo es muy simple y no reflaja los cassos reales de una verdadera CSRF, tomese como prueba de concepto.