Registro del cliente OAuth2: ¿debería redirect_uri ser único entre los clientes?

2

Al operar un Servidor de Autorización OAuth2 :

  

El servidor de autorización DEBE requerir a los siguientes clientes que      registrar su punto final de redirección:

     

o clientes públicos.

     

o Clientes confidenciales que utilizan el tipo de concesión implícita.

     

El servidor de autorización DEBERÍA exigir a todos los clientes que registren sus       punto final de redirección antes de utilizar el punto final de autorización.

     

...

     

La falta de un requisito de registro de URI de redirección puede habilitar un      atacante para utilizar el punto final de autorización como un redirector abierto como      descrito en Sección 10.15 .

¿Hay algún beneficio de seguridad adicional para imponer una restricción de unicidad en redirect_uri s registrado? Es decir, ¿cualquier redirect_uri dado podría estar asociado a lo más un cliente en particular?

Estoy pensando particularmente en el caso de clientes públicos, donde redirect_uri es el único medio que tiene el servidor de autorización para identificar al cliente (ya que el cliente no puede proteger las credenciales del cliente), pero también estoy interesado en las respuestas sobre privado clientes.

¿Hay vulnerabilidades expuestas si un atacante pudiera registrar un nuevo cliente con el mismo redirect_uri que un cliente existente?

    
pregunta bjmc 23.03.2016 - 16:54
fuente

3 respuestas

2

Realmente no hay una buena manera de garantizar de manera segura que un cliente sea lo que dice que es, por lo que realmente no tiene sentido intentar que cada URI de redireccionamiento sea único para un solo cliente. Para empezar, la única razón por la que registra URI es para evitar el escenario de redireccionamiento abierto que se menciona en la documentación, lo que hace que sea trivial decirlo, configurar un cliente malvado al que se redirige después de la autenticación, lo que le permite enmascararse como un cliente benigno. No resuelve problemas como el envenenamiento de DNS o las modificaciones del archivo del host.

Dado que no hay forma de garantizar que un cliente sea el mismo solicitante que la última vez que realizó una solicitud, debido a la naturaleza sin estado de los servidores HTTP, lo que esto significa a largo plazo es que tendrá que emitir un Mire cada vez que el cliente quiera conectarse por un canal lateral seguro y autorice la solicitud de esa manera. Para los clientes privados, eso puede ser imposible, porque alguien podría descubrir cómo hacerlo mediante la ingeniería inversa de la aplicación que hace esto. Para los clientes públicos, esto sería factible, pero agregaría complejidad adicional y un pequeño retraso para cada solicitud.

No hay un escenario que haga que una restricción de cliente única sea más segura que no tener una regla de este tipo, ya que cualquier forma que pueda usarse para evitar una también podría usarse para evitar la otra, solo agrega una capa de oscuridad. En el caso de un cliente privado, ni siquiera se ralentizaría trivialmente a un determinado atacante, y los clientes públicos están protegidos por otros medios de todos modos (incluido un secreto de cliente , un tipo de contraseña que solo ese cliente debería saber).

    
respondido por el phyrfox 23.03.2016 - 18:42
fuente
1

Tenga en cuenta que imponer la singularidad en realidad causa una variedad de problemas.

El ejemplo más simple es que estás restringiendo quién puede usar https://localhost:8080/ para un solo cliente. Cualquier otro cliente que intente usar https://localhost:<port>/ tendría que jugar un juego de adivinanzas con puertos para encontrar un URI disponible.

Además, está estableciendo una forma de reclamación de un dominio al hacer esto. A menos que esté usando algo como ACME para imponer que los clientes realmente posean los URI que están registrando, usted estamos permitiendo a un cliente reclamar un URI que no es de su propiedad. Un cliente descuidado (o malicioso) podría registrarse para URI como https://www.whitehouse.gov/oauth_redirect . Si real whitehouse.gov aparece para registrar un URI, ese valor ya no está disponible, y no hay forma de quitar ese URI del otro cliente.

Tal colisión no es necesariamente una ocurrencia accidental probable en diferentes instituciones, pero whitehouse.gov puede registrar múltiples clientes. Aquí se encuentra con otros problemas: si whitehouse.gov quiere hacer la transición de un cliente a otro sin cambiar un URI de redirección, no pueden hacerlo.

También expresaría una leve y general preocupación por el supuesto de que ver un URI de redirección dado significa definitivamente que el servicio está interactuando con un cliente específico. Tal suposición no puede ni debe hacerse.

    
respondido por el sirosen 23.03.2016 - 19:47
fuente
0

Los URI de redireccionamiento no necesitan ser, ni deberían ser, globalmente únicos. Solo deben ser únicos dentro del perfil de un cliente. Los URI de redireccionamiento no se corresponden necesariamente con una dirección física real. Simplemente deben ser comprendidos por el cliente y verificados por el servidor.

Sin embargo, las ID de cliente deben ser únicas a nivel mundial.

Cuando un cliente solicita autorización, debe proporcionar su ID de cliente y redirigir el URI.

Si estoy creando una aplicación de navegador del cliente, mi URI de redireccionamiento del desarrollo probablemente será algo como enlace , no debería importar si resulta que alguien más ha usado este mismo URI de redireccionamiento.

    
respondido por el user1751825 24.03.2016 - 03:05
fuente

Lea otras preguntas en las etiquetas