Come impedire a CAS di divulgare l'identità dell'utente ai siti Web arbitrari visitati?

3

Sommario

evil.example.com potrebbe utilizzare una cornice nascosta per richiedere un ticket CAS da corporation.example.net, quindi convalidarlo per ricevere il nome utente dell'utente sfortunato. Questo deanonymizes in modo efficace l'utente CAS a qualsiasi sito dannoso che visitano.

  • In qualità di autore / manutentore del server CAS, come posso evitare la deanonimizzazione dei miei utenti?
  • Come utente CAS, come posso impedire la deanonimizzazione di me stesso?

Sfondo:

CAS (Central Authentication Service) è un sistema single sign-on con un flusso basato sul redirect:

  1. La pagina del client reindirizza al server CAS con un parametro service che è l'URL del sito del cliente.
  2. Il server CAS autentica l'utente tramite un cookie esistente, una pagina di accesso, ecc.
  3. Il server CAS reindirizza a service URL con il parametro ticket aggiunto.
  4. Il client chiama un endpoint di convalida del server, scambiando il ticket per un nome utente.

Attacco

  1. L'utente è già autenticato con il server CAS di corporation.example.net e il browser ha il cookie di concessione ticket per quel dominio.
  2. L'utente passa a http://evil.example.com/dancing-bunnies.html , che incorpora http://corporation.example.net/cas/login?service=http://evil.example.com/attack.html come frame. (L'inquadratura è meno evidente di un reindirizzamento - non c'è alcuna differenza di sicurezza.)
  3. L'endpoint /login del server CAS nel frame vede che lo user-agent ha già i cookie di accesso, quindi reindirizza ciecamente all'URL del servizio, oltre a un ticket: http://evil.example.com/attack.html?ticket=ST-abc123
  4. evil.example.com legge il ticket da querystring e GETs http://corporation.example.net/cas/validate?service=http://evil.example.com/attack.html&ticket=ST-abc123 , che risponde con yes\nalice\n .
  5. evil.example.com ora sa che l'utente è alice @ corporation.example.net .

Possibile miglioramento

  1. Limita il dominio su service URL del parametro a un set sicuro noto
  2. Richiede l'interazione dell'utente prima del reindirizzamento al client
  3. Vieta l'inquadratura (con intestazioni o script)

Qualche svantaggio di uno di questi? Ci sono altre soluzioni?

Note

  • Limitare il parametro service a una corrispondenza stringa su un set di URL sicuri noti è probabilmente poco pratico, poiché viene utilizzato dai client per portare lo stato tramite il processo di reindirizzamento.

ETA: sarò molto triste se la tua risposta presuppone quanto segue ...

  • ... che l'attacco si basa sulla comunicazione tra origini
  • ... che sto affermando che questo fa qualcosa di diverso dal deanonymize dell'utente
posta phyzome 11.06.2013 - 22:02
fonte

3 risposte

1

Sembra che CAS 3 abbia un punto di estensione per i Servizi Whitelist come indicato qui: link

Come hai affermato nelle tue note, questo dovrebbe risolvere la tua preoccupazione e dovrebbe essere a tua disposizione.

    
risposta data 01.07.2014 - 20:32
fonte
1

Disclaimer: non conosco CAS, ma penso di aver capito cosa fa e come funziona.

Lo scenario di attacco non è possibile in questo modo, anche se il sito web aziendale non presenta intestazioni di frame busting. Queste intestazioni frame busting sono più per evitare click-jacking, ma questo è un altro argomento.

Se il frame esegue un reindirizzamento, viene reindirizzato solo il contenuto della cornice.

Il sito malvagio non può accedere a nulla del frame che incorpora (nemmeno l'URL), perché si trova in un altro sito. Se così fosse, allora tali scenari sarebbero possibili, ma tutti i browser moderni (anche da quando IE4 credo) non consentono l'accesso tra i siti, quindi il sito malvagio non può accedere al nuovo URL e quindi non ha accesso all'utente identificato dell'IFRAME.

Come utente puoi proteggerti effettuando sempre il logout e se qualsiasi sito sospetto richiede autorizzazioni, non eseguire l'autenticazione.

Un buon esempio di questo scenario che citi è Facebook. Molti siti incorporano funzionalità di commento di Facebook e altre cose. Ma non hanno il tuo nome utente in alcun modo. Se fosse possibile ottenere il nome utente di Facebook in qualche modo (gli utenti di Facebook si disconnettono raramente), questo sarebbe un grosso buco di sicurezza. Puoi richiedere la taglia del bug se trovi un modo per ottenerlo o per accedere e pubblicare o votare nel nome dell'utente.

    
risposta data 09.07.2013 - 01:06
fonte
0

Questa è una buona domanda. Tuttavia, la mia comprensione del protocollo CAS è che quando chiami l'URI / serviceValidate, CAS verifica se il ticket del servizio ottenuto dal parametro request è disponibile nel registro del servizio E poi controlla se il servizio è un servizio registrato .

Nel tuo esempio, evil.example.com non verrebbe registrato, quindi non dovresti essere in grado di ottenere l'ID UTENTE poiché il server CAS ti causerà un'eccezione di servizio non autorizzato ;).

    
risposta data 18.08.2013 - 19:18
fonte

Leggi altre domande sui tag