¿Por qué no puedes robar el token del sincronizador para realizar CSRF? [duplicar]

11

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.

    
pregunta Anonymous Penguin 26.07.2015 - 20:10
fuente

1 respuesta

18

Lo que impide que un sitio malintencionado obtenga el token anti-CSRF es la misma política de origen. La Política del mismo origen, o SOP, se encuentra en el nivel del navegador y define dónde se le permite a JavaScript comunicarse.

JavaScript en example.com no puede llamar a example.org para obtener datos. Además, JavaScript en http://www.example.com/ no puede llamar a http://www.example.com:8080/ ya que el puerto es diferente. Hay más restricciones que se establecen y se pueden encontrar aquí: enlace .

Hay excepciones a esto con el uso compartido de recursos de origen cruzado, pero eso tiene sus propias reglas que deben seguir los navegadores. CORS se puede encontrar aquí: enlace .

    
respondido por el user79537 26.07.2015 - 20:33
fuente

Lea otras preguntas en las etiquetas