Si hago un mal uso de OAuth 2.0 para realizar la autenticación, ¿estoy en riesgo?

8

Entiendo que OAuth no es un protocolo de autenticación, sino uno de autorización (incluso si el primer párrafo en La página OAuth 2.0 de Google no está de acuerdo ), además de eso:

  

[...] se puede abusar de la autorización en alguna pseudo-autenticación, sobre la base de que si la entidad A obtiene de B una clave de acceso a través de OAuth, y la muestra al servidor S, entonces el servidor S puede inferir that B autentificó A antes de otorgar la clave de acceso.

y que debo usar OpenID cuando necesito autenticar a un usuario.

Sin embargo, significa que si realmente uso OAuth (no OpenID Connect , sino OAuth 2.0) con Google, ¿significa que mi aplicación web no es segura? ¿Se puede comprometer para obtener acceso a una cuenta o hacer algo mal? ¿Puede un usuario falsificar algo para pasarlo por otro usuario?

Para que la pregunta sea un poco menos abstracta, asumamos que:

  • Las bibliotecas que uso, como Flask-OAuth para Python y bibliotecas similares para otros idiomas, son seguras.

  • Confío en Google,

  • La cuenta de Google de un usuario no está comprometida (si la cuenta de Google del usuario está comprometida, se espera que un atacante tenga acceso a la cuenta del usuario en mi aplicación web),

  • No se debe confiar en el FAI / servicio de alojamiento / otro hombre en el medio,

  • Cualquier persona que tenga una cuenta de Google puede iniciar sesión / registrarse / lo que sea,

  • No necesito que la dirección de correo electrónico, el nombre / apellido u otra información personal del usuario sea verdadera; todo lo que necesito es mantener los datos de un usuario protegidos de otros usuarios.

pregunta Arseni Mourzenko 07.06.2016 - 15:18
fuente

1 respuesta

4

El problema principal es asegurarse de que está protegido contra el problema de diputado confuso .

Imagina que estás usando OAuth para autenticar usuarios dentro de tu aplicación.

Sin embargo, un desarrollador malvado tiene su propia aplicación que también usa OAuth. Supongamos que su aplicación es un juego de solitario, que utiliza la API OAuth de Google. Un usuario se autentica para Solitario usando su cuenta de Google.

Sin embargo, el malvado desarrollador toma la autorización que Google obtuvo del usuario y la reproduce en su aplicación. Debido a que está utilizando OAuth para la autenticación, está tomando el token de autorización como una declaración autorizada de que el usuario es en realidad el usuario que quería autenticar, pero no lo es, es el atacante que usa el token de autorización para autenticarse como ese usuario. . Por lo tanto, el atacante ha abusado de su autorización para engañar a su aplicación que el usuario está autentificando con usted.

Este blog lo explica bien. Tenga en cuenta que utilizan la frase "secuencias de comandos de sitios cruzados" cuando creo que significan "falsificación de solicitud de sitios cruzados".

Puedes mitigar esto validando correctamente el parámetro audience . También debe establecer un state y validarlo en la devolución de llamada porque esto puede evitar que un ataque CSRF realice un ataque de "inicio de sesión CSRF" en un usuario de su aplicación (por ejemplo, si su aplicación sincronizó datos con Google, un atacante que hace otro usuario parece que han iniciado sesión, ya que podrían robar los datos sincronizados a su cuenta de Google).

También vea esta respuesta .

    
respondido por el SilverlightFox 09.06.2016 - 12:09
fuente

Lea otras preguntas en las etiquetas