Se utilizzo impropriamente OAuth 2.0 per eseguire l'autenticazione, sono a rischio?

8

Comprendo che OAuth non è un protocollo di autenticazione, ma un'autorizzazione (anche se il primo paragrafo su La pagina di Google OAuth 2.0 non è d'accordo ), così come:

[...] authorization can be abused into some pseudo-authentication, on the basis that if entity A obtains from B an access key through OAuth, and shows it to server S, then server S may infer that B authenticated A before granting the access key.

e che dovrei usare OpenID quando devo autenticare un utente.

Tuttavia, ciò significa che se utilizzo effettivamente OAuth (non OpenID Connect , ma OAuth 2.0) con Google, significa che la mia applicazione web non è sicura? Può essere compromesso ottenere l'accesso a un account o fare qualcosa di sbagliato? Un utente può creare qualcosa da passare per un altro utente?

Per rendere la domanda un po 'meno astratta, supponiamo che assuma :

  • Le librerie che uso, come Flask-OAuth per Python e librerie simili per altre lingue, sono sicure.

  • Mi fido di Google,

  • L'account Google di un utente non è compromesso (se l'account Google dell'utente viene compromesso, è previsto che un utente malintenzionato abbia accesso all'account dell'utente sulla mia applicazione web),

  • Il FAI / servizio di hosting / altro uomo nel mezzo non dovrebbe essere considerato affidabile,

  • Chiunque abbia un account Google può accedere / registrarsi / qualsiasi cosa,

  • Non ho bisogno che l'indirizzo e-mail dell'utente, il nome / il cognome o altre informazioni personali siano vere; tutto ciò di cui ho bisogno è di mantenere i dati di un utente protetto da altri utenti.

posta Arseni Mourzenko 07.06.2016 - 15:18
fonte

1 risposta

4

Il problema principale è assicurarti di proteggerti dal problema dei delegati confusi .

Immagina di utilizzare OAuth per autenticare gli utenti all'interno della tua applicazione.

Tuttavia, uno sviluppatore malvagio ha una propria applicazione che usa anche OAuth. Supponiamo che la loro applicazione sia un gioco di solitario, che utilizza l'API OAuth di Google. Un utente si autentica per il solitario utilizzando il suo account Google.

Tuttavia, lo sviluppatore malvagio prende l'autorizzazione che ha ricevuto da Google dall'utente e lo gioca invece sulla tua app. Poiché stai utilizzando OAuth per l'autenticazione, stai prendendo il token di autorizzazione come affermazione autorevole che l'utente è in realtà il tuo utente che volevi autenticare, ma non lo è: è l'attaccante che utilizza il token di autorizzazione per autenticarsi come tale utente . Pertanto, l'autore dell'attacco ha abusato della tua autorizzazione per ingannare l'applicazione che l'utente sta effettivamente effettuando l'autenticazione con te.

Questo blog lo spiega bene. Nota che usano la frase "cross site scripting" quando penso che significano "cross site request forgery".

Puoi attenuarlo convalidando correttamente il parametro audience . Dovresti anche impostare un state e convalidarlo sul callback perché questo può impedire a un attacco CSRF di eseguire un attacco "login CSRF" su un utente dell'applicazione (ad esempio se l'applicazione ha sincronizzato i dati con Google, un utente malintenzionato che effettua un altro utente sembra che abbiano effettuato l'accesso poiché potrebbero rubare i dati sincronizzati al proprio account Google).

Vedi anche questa risposta .

    
risposta data 09.06.2016 - 12:09
fonte

Leggi altre domande sui tag