He visto la respuesta ¿Es posible CSRF? ¿Si ni siquiera utilizo cookies? pero hay 2 respuestas conflictivas y la pregunta en sí tampoco proporciona tanta información.
Estoy creando una API REST que será utilizada por un cliente web (de nuestra propia creación) que se ejecuta en otro dominio, por lo que haremos solicitudes CORS. Esta API se ejecuta como un servidor de recursos oauth2, por lo que el acceso está restringido por tokens de acceso que se pasan en el encabezado de autenticación. No tenemos galletas, todo es apátrida. Sigo los consejos del artículo en enlace
- Utilizaremos SSL
- Tenemos uri de redireccionamiento pre-registrado
- Nuestro único tipo de concesión es el código de autorización, sin requerir un secreto de cliente (ya que la fuente del cliente web es pública) en lugar del tipo de concesión implícita, según las recomendaciones en enlace
- El cliente se autentica con un encabezado cuando realiza llamadas al servidor de recursos reales
- La obtención del token de acceso se realiza al pasar el código de autorización 1 vez en los parámetros del formulario (
x-www-form-urlencoded
), que parece ser la forma normal, no debería quedar bloqueado en el historial del navegador ya que no es un parámetro de consulta. - El cliente también usará algún parámetro de estado secreto cuando obtenga el código de autorización. En este caso, no estoy seguro de que haya un punto ya que el cliente no depende de un secreto para obtener un token de acceso al intercambiar un código de todos modos.
- Para el punto final oauth / token donde realmente obtiene un token de acceso, el único origen permitido es el dominio de nuestro cliente web
- Para el punto final oauth / authorize, CORS no está permitido. Quizás esto sea excesivo, ya que el uri de redireccionamiento solo apuntaría a nuestro propio dominio de todos modos.
Creo que eso cubre casi todo en ese lado.
Ahora existe otro posible vector de ataque en la forma del propio servidor de autenticación oauth2, que se supone que es SSO y tiene sesiones y es accesible con autenticación básica. Sin embargo, no parece haber ninguna acción que pueda tomar con un ataque csrf que realmente sea útil. Puede hacer una solicitud a estos puntos finales, pero tendría que poder leer el resultado, lo que se evita mediante la configuración de CORS y el hecho de que los uri de redireccionamiento están registrados previamente. No hay POST que pueda hacer allí para cambiar su contraseña, restablecer su dirección de correo electrónico, etcétera, todas esas cosas también están expuestas como un servidor de recursos.
¿Me estoy perdiendo algo? ¿Cómo harías para detectar vulnerabilidades aquí?