¿Es posible CSRF en un SPA SSR con autenticación de cookie?

4

Tengo una aplicación de una sola página, que es básicamente un consumidor para mi API que se autentica utilizando el encabezado Authorization . Ahora, porque hago la representación del lado del servidor, necesito autenticar en la solicitud inicial, que significa Necesito usar cookies para almacenar el token de autenticación.

Ahora que entiendo, CSRF funciona así en un sitio web típico:

  • Encuentre un punto final que haga algo dañino como /delete-account que se autentique con cookies
  • En example.com , ponga un <img href="http://mywebsite.com/delete-account"> (o lo que sea para una solicitud POST)

Sin embargo, para mí, parece que es imposible que ocurran ataques CSRF en el caso de un SPA, incluso si el token de autenticación se envía como una cookie. El procedimiento normal es un poco como:

  • El usuario visita una página, por ejemplo, /account
  • El servidor representa la página según el usuario autenticado (dada la cookie de autenticación)
  • Se devuelve la página web
  • Ahora, si el usuario desea eliminar su cuenta, puede presionar el botón, que enviaría una solicitud a la API que autentica las solicitudes solo por el encabezado Authorization

Ahora en un ataque CSRF:

  • <img href="/account">
  • El servidor procesa y devuelve la página web
  • Umm, ¿no pasa nada?

Quiero decir que no puedo pensar en una forma en que pueda ser vulnerable a CSRF en esta situación, incluso si uso cookies para la autenticación, y hasta donde entiendo, los ataques CSRF no pueden eliminar datos de las páginas web. por lo tanto, la devolución de datos confidenciales no debería importar, siempre que no desencadene una acción.

Entonces, mi pregunta es: ¿está bien no implementar ningún tipo de protección CSRF en este caso? Tengo tanto miedo de tener un problema de seguridad al respecto.

    
pregunta OverCoder 09.01.2018 - 23:11
fuente

2 respuestas

4
  

Ahora, si el usuario desea eliminar su cuenta, puede presionar el botón, que enviaría una solicitud a la API que autentica las solicitudes solo por el encabezado Authorization

En última instancia, envía una solicitud para realizar una acción que debe autenticarse de alguna manera. Y, dado que está utilizando el encabezado de Autorización para la autenticación, de alguna manera evita el CSRF a menos que esté utilizando Autenticación básica HTTP o NTLM . Estos tokens de autenticación se envían en cada solicitud similar a las cookies.

  

Quiero decir que no puedo pensar en una forma en que pueda ser vulnerable a CSRF en esta situación, incluso si uso cookies para la autenticación, y hasta donde entiendo, los ataques CSRF no pueden eliminar datos de las páginas web. por lo tanto, la devolución de datos confidenciales no debería importar, siempre y cuando no active una acción

Hay situaciones en las que puedes encontrarte vulnerable a CSRF, aquí hay algunas;

  1. ¿Qué sucede si su servidor acepta cualquiera de dos, es decir, cookies o token?

- > Recientemente me había encontrado con el mismo. La aplicación necesitaría cookies o token de autenticación. Dado que, las cookies siempre se envían, se asume que se autentican y su solicitud se procesa, lo que lo deja vulnerable a CSRF nuevamente, suponiendo que su aplicación permita el envío de token de autorización desde cualquier dominio.

  1. ¿Qué sucede si su aplicación pierde el token de autenticación que se puede leer en varios dominios?

- > He visto varias aplicaciones que extraen tokens de un punto final predefinido que de alguna manera se puede leer en forma cruzada. Algunas posibilidades son, JSONP, CORS, crossdomain.xml, JSON Hijacking, etc. Esto también conduce a CSRF.

  

incluso si uso cookies para la autenticación

Eso siempre es vulnerable, solo necesitas jugar con la solicitud final, que es una solicitud de API en tu caso.

  

Entonces, mi pregunta es: ¿está bien no implementar ningún tipo de protección CSRF en este caso? Tengo tanto miedo de tener un problema de seguridad con respecto a eso

De hecho, sí. Además, asegúrese de incluir en la lista blanca los dominios que pueden realizar solicitudes a su API y devolver Access-Control-Allow-Credentials: false . Esto, en mi opinión, lo hace bastante seguro contra los puntos de consideración de CSRF mencionados anteriormente.

    
respondido por el 1lastBr3ath 10.01.2018 - 04:19
fuente
2

En primer lugar, es importante comprender lo siguiente: debe implementar algo para autenticar a un usuario y debe implementar algo para autenticar una solicitud (Anti-CSRF). CSRF Attack usa una sesión de una víctima, por lo que si su valor de encabezado Authorization es el mismo para todas las sesiones, su aplicación podría ser vulnerable a un ataque CSRF, ya que su aplicación solo valida una sesión de usuario, debe validar una solicitud. y esto es posible utilizando un token con las siguientes funciones:

  • El tiempo suficiente.
  • Seudoaleatorio.
  • Valor único.
  • Uno por solicitud.

En primer lugar, debe validar la sesión del usuario, si es un usuario válido y sus permisos o función, luego debe validar la solicitud a través del token, si es un token válido, entonces puede permitir la solicitud.

Espero que esta información te ayude.

    
respondido por el hmrojas.p 10.01.2018 - 00:13
fuente

Lea otras preguntas en las etiquetas