Si los tokens no están ocultos, creo que el atacante puede cargar el sitio explotado en un iframe, pero no podrá acceder al token debido a la misma política de origen (SOP).
¿Esto es correcto o existen otras formas de acceder a los tokens CSRF?
No puede ocultar o cifrar su token CSRF, ya que generalmente se pasa a la aplicación web en la solicitud HTTP GET o HTTP POST y debe estar presente en la página HTML (o generada por JavaScript, que es básicamente lo mismo).
El token CSRF es solo una forma de proteger su aplicación web contra envíos automáticos (también conocido como ataque CSRF). Se recomienda su uso cuando se trata de datos no muy sensibles. Si desea proteger su aplicación web contra CSRF con el token CSRF, le recomiendo que genere un nuevo token al menos cada 15-20 minutos, por lo que no puede forzarse con la fuerza bruta fácilmente.
En muchas implementaciones del mundo real, el token CSRF está vinculado al identificador de sesión. El mismo consejo es válido también para el identificador de sesión.
En cuanto a SOP, no debería permitir el acceso por defecto a elementos dentro de iframes. Sin embargo, ha habido vulnerabilidades en muchos navegadores en el pasado, lo que permitió este comportamiento.
La línea inferior: no tiene que ocultar el token CSRF. En su lugar, generar uno nuevo de vez en cuando. Para acciones muy sensibles, utilice medios adicionales de verificación del usuario, por ejemplo, solicite la contraseña del usuario o use OTP.
¿Oculto? Prefiero decir que se comunica de forma segura donde solo el usuario tiene acceso al token. Si hay un iframe malicioso en su sitio (tal vez un anuncio malvado o mejor aún, un iframe invisible), aún debería estar protegido por SOP siempre y cuando no haya realizado una configuración incorrecta con el uso compartido de recursos de origen cruzado.
También quiero agregar como una advertencia que los navegadores más antiguos (incluso hace un año) tuvieron algunas vulnerabilidades que le permitieron salir del SOP. Esto no es por diseño!
El token CSRF no necesita estar oculto en la página html, pero debe estar cifrado durante el tránsito para evitar una situación de MITM en la que el atacante busca el token CSRF y realiza un envío de formulario en su nombre. Este tipo de ataque normalmente implica realizar envíos de formularios utilizando una sesión de usuario autenticado.
Si un atacante carga el sitio con un formulario CSRF protegido en un iframe
, entonces ese sitio tiene un problema con sus encabezados de respuesta CSP. Principalmente, al sitio le falta una directiva X-Frame-Options
configurada de forma segura.
Lea otras preguntas en las etiquetas csrf