Estoy leyendo sobre CSRF y encontré tokens de sincronizador. No entiendo por qué no puedes hacer un CSRF para obtener el token para hacer un CSRF real.
Ejemplo: bank.com
tiene una forma como esta en https://bank.com/transfer
:
<form action="https://bank.com/do_transfer" method="post">
<input type="hidden" name="synchroniser_token" value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" >
<input type="hidden" name="to" value="ciro">
<input type="hidden" name="amount" value="100">
<button type="submit">Send 100$ to Ciro.</button>
</form>
Este código fue adaptado de enlace
¿Qué detendría a malicioussite.com
de GETing https://bank.com/transfer
con JavaScript en el cliente (usando el ID de sesión ya almacenado en la cookie) y desechando la página para el authenticity_token
? Luego, podrían usar ese ID para hacer un CSRF real , esencialmente un CSRF para hacer otro CSRF.
Requeriría JavaScript para ejecutarse, por lo que sería más difícil hacer una simple imagen de 0px X 0px, pero es más que factible.