Resumen
evil.example.com podría usar un marco oculto para solicitar un ticket de CAS de corporation.example.net, luego validarlo para recibir el nombre de usuario del infortunado usuario. De este modo, se deseanomiza de manera efectiva al usuario de CAS en cualquier sitio malicioso que visite.
- Como autor / mantenedor de un servidor CAS, ¿cómo puedo evitar la desanomización de mis usuarios?
- Como usuario de CAS, ¿cómo puedo evitar la desanomización de mí mismo?
Fondo:
CAS (Central Authentication Service) es un sistema de inicio de sesión único con un flujo basado en redireccionamiento:
- La página del cliente redirige al servidor CAS con un parámetro
service
que es la URL del sitio del cliente. - El servidor CAS autentica al usuario a través de una cookie existente, una página de inicio de sesión, etc.
- El servidor CAS redirige a
service
URL con el parámetroticket
adjunto. - El cliente llama a un punto final de validación del servidor, intercambiando el ticket por un nombre de usuario.
Ataque
- El usuario ya se ha autenticado con el servidor CAS de
corporation.example.net
y su navegador tiene la cookie de otorgamiento de tickets para ese dominio. - El usuario navega a
http://evil.example.com/dancing-bunnies.html
, que incrustahttp://corporation.example.net/cas/login?service=http://evil.example.com/attack.html
como marco. (El marco es menos visible que una redirección, no hay diferencia de seguridad). - El punto final
/login
del servidor CAS en el marco ve que el agente de usuario ya tiene cookies de inicio de sesión, por lo que redirige ciegamente a la URL del servicio, más un ticket:http://evil.example.com/attack.html?ticket=ST-abc123
-
evil.example.com
lee el ticket de la cadena de consulta y GETshttp://corporation.example.net/cas/validate?service=http://evil.example.com/attack.html&ticket=ST-abc123
, que responde conyes\nalice\n
. -
evil.example.com
ahora sabe que el usuario esalice
@corporation.example.net
.
Posible mejora
- Restrinja el dominio en las URL de los parámetros
service
a un conjunto seguro conocido - Requieren la interacción del usuario antes de redirigir de nuevo al cliente
- Forbid framing (ya sea con encabezados o secuencias de comandos)
¿Alguna desventaja de cualquiera de estos? ¿Hay otras soluciones?
Notas
- Es probable que no sea práctico restringir el parámetro
service
a una coincidencia de cadena en un conjunto de URL seguras conocidas, ya que los clientes lo utilizan para llevar el estado a través del proceso de redireccionamiento.
ETA: Estaré muy triste si tu respuesta asume lo siguiente ...
- ... que el ataque se basa en la comunicación de origen cruzado.
- ... que estoy diciendo que esto hace otra cosa que no sea desanonizar al usuario