¿Qué define una vulnerabilidad CSRF?

2

Como parte de mi puesto en la empresa con la que estoy empleado, realizo una prueba de penetración manual en nuestra aplicación web (aún en desarrollo) para detectar vulnerabilidades. Durante las pruebas, intenté ver si nuestra aplicación web era vulnerable a CSRF. Para ello, ejecuté la aplicación en la pestaña A y me autentiqué con la aplicación web. En la pestaña B, abrí la consola de JavaScript y corrí:

window.location.replace("http://privilegedLocationInWebApp.com");

La redirección se realizó correctamente, dirigiendo la pestaña B a una página autenticada dentro de la aplicación web.

Más tarde en el día en casa, decidí jugar y ver qué otros sitios son vulnerables a esto, ya que me parece que es algo que probablemente se pasa por alto con frecuencia y probar que no cause daño a la página web (es decir, no estoy intentando A SQL inyectarlos o hacerles cualquier daño). El intento de una redirección de este tipo en una pestaña no autenticada con una pestaña separada ya autenticada tuvo éxito en varios sitios, algunos parecen ser demasiado importantes para permitir tal vulnerabilidad.

¿Esto es realmente una vulnerabilidad CSRF? ¿O esto es simplemente pasado por alto por los propietarios de sitios web y aplicaciones web, ya que estas solicitudes son todas solicitudes GET pero un intento de hacer un POST puede ser rechazado ya que simbolizaría una verdadera vulnerabilidad CSRF?

    
pregunta dFrancisco 15.01.2018 - 15:24
fuente

1 respuesta

8

Aquí hay una serie de malentendidos:

  • Las pestañas no pueden ser "autenticadas" o "no autenticadas". Si está utilizando sesiones basadas en cookies para la autenticación, es la presencia de la cookie de sesión la que le da acceso. Esa cookie pertenece a la sesión del navegador y no a una pestaña específica.
  • Cargar una "ubicación privilegiada", es decir, una página a la que un usuario no autenticado no debería tener acceso, no es una prueba de CSRF.

La víctima podría abrir una nueva pestaña, ingresar la URL a la ubicación privilegiada y tener acceso a ella, ¿verdad? Todo lo que has hecho es hacer esto con un poco de JavaScript. ¿Cómo podría usted, como atacante, aprovechar esto? ¡No pudiste! El principio de origen único de los navegadores le impediría leer cualquier dato, y no engañó al servidor para que realizara una acción.

Entonces, ¿qué constituiría una CSRF adecuada? Para que esto sea útil, debe hacer que el servidor haga algo: crear un usuario, eliminar una publicación, cambiar una configuración, lo que sea. Como usted dice, esto normalmente requeriría una solicitud POST, pero en una página mal diseñada podría ser posible con GET también. De todos modos, eso es lo que deberías estar buscando!

    
respondido por el Anders 15.01.2018 - 15:35
fuente

Lea otras preguntas en las etiquetas