¿Qué está protegiendo realmente PKCE?

5

Estoy tratando de entender cómo funciona PKCE en una aplicación móvil y hay algo que no. entiendo muy bien.

Entonces, de lo que puedo recopilar, la aplicación cliente crea una cadena criptográfica segura al azar conocida como el verificador de código. Esto se almacena entonces. A partir de esto, la aplicación genera un desafío de código. El desafío de código luego se envía en una solicitud de API a un servidor junto con la forma en que se generó el desafío, por ejemplo, S256 o simple. El servidor almacena este desafío junto con un código de autorización adecuado para la solicitud en cuestión.

Cuando el cliente intenta intercambiar el código de un token de acceso, también envía el código-verificador original en la solicitud. Luego, el servidor recupera el desafío almacenado y el método utilizado originalmente para generarlo para este código en particular y genera el hash s256 / plain equivalente y los compara. Si coinciden, devuelve un token de acceso.

¿Lo que no entiendo es cómo se supone que esto reemplaza un secreto en una aplicación cliente? Seguramente, si quisiera simular esto, simplemente tomaría client_id como de costumbre y generaría su propio verificador de código y desafío, y estará en la misma posición como si PKCE no fuera necesario en primer lugar. ¿Qué está intentando resolver PKCE aquí si la idea original era que es básicamente un "secreto dinámico"? Supongo que solo está ahí si alguien está "escuchando" cuando se devuelve auth_code , pero si está utilizando SSL de nuevo, ¿es esto necesario? Se considera que reemplaza el hecho de que no debe almacenar un secreto en una aplicación pública, pero el hecho de que el cliente es responsable de generar en lugar de un servidor siente que en realidad no está ayudando allí.

    
pregunta TommyBs 14.12.2017 - 12:56
fuente

2 respuestas

5

Le pedimos disculpas por responder a una pregunta anterior, pero redacción Okta ha explicado este tema bastante bien en mi humilde opinión.

Creo que se debe a que PKCE está destinado a aplicaciones nativas (por ejemplo, Android, iOS, UWP, Electron, etc.) donde deja el contexto de seguridad de su aplicación y va al navegador para autenticarse, y confía en el retorno seguro a Su aplicación desde el navegador. No necesariamente tiene TLS en la redirección a su aplicación (en el caso de esquemas personalizados, está confiando en el sistema operativo para que la respuesta vuelva a su aplicación), por lo que en el caso de que su código de autorización vaya a algún lugar malicioso, La aplicación no podría obtener un token de acceso sin el secreto dinámico.

Los méritos de un secreto dinámico en un cliente público son evidentes aquí, y la suposición de PKCE es que no es difícil interceptar la respuesta del navegador a su aplicación.

    
respondido por el someone1 03.04.2018 - 19:33
fuente
3

La razón por la que PKCE es importante es que en el sistema operativo móvil, el sistema operativo permite que las aplicaciones se registren para los URI de redirección, de modo que una aplicación maliciosa pueda registrarse y recibir redirecciones con el código de autorización para aplicaciones legítimas. Esto se conoce como un ataque de intercepción de código de autorización.

Ataque de intercepción de código de autorización

Esto se describe en WSO2 aquí:

  

Dado que se pueden registrar múltiples aplicaciones como un controlador para el URI de redirección específico, la vulnerabilidad de este flujo es que un cliente malintencionado también podría registrarse como un controlador para el mismo esquema de URI que maneja una aplicación legítima. Si esto sucede, existe la posibilidad de que el sistema operativo analice el URI del cliente malicioso. El flujo de este ataque se ilustra en el siguiente diagrama.

     

En algunos sistemas operativos como Android, en el paso 5 del flujo, se le solicita al usuario que seleccione la aplicación para manejar la URI de redirección antes de analizarla mediante una actividad de "Acción completa usando". Esto puede evitar que una aplicación maliciosa lo maneje, ya que el usuario puede identificar y seleccionar la aplicación legítima. Sin embargo, algunos sistemas operativos (como iOS) no tienen ningún esquema de este tipo.

Para entender esto mejor, aquí hay un diagrama y una discusión de OpenID. Puede ver que el navegador del sistema móvil tiene la responsabilidad de recibir el URI de redireccionamiento y enrutarlo a la aplicación correcta.

  • Ref: enlace

Sin embargo, dado que los sistemas operativos móviles pueden permitir que muchas aplicaciones se registren para el mismo URI de redireccionamiento, una aplicación malintencionada puede registrarse y recibir un código de autorización legítimo como se muestra en este diagrama, también por WSO2:

Mitigación de ataques por PKCE

PKCE mitiga esto al requerir un conocimiento compartido entre la aplicación que inicia la solicitud OAuth 2.0 (solicitud de código de autenticación) y la que intercambia el código de autenticación por el token. En el caso de un ataque de intercepción de código de autenticación, la aplicación maliciosa no tiene el verificador para completar el intercambio de tokens.

    
respondido por el Grokify 02.06.2018 - 17:55
fuente

Lea otras preguntas en las etiquetas