Cognito Identity Pools
Informazioni di base
I pool di identità svolgono un ruolo cruciale consentendo ai tuoi utenti di acquisire credenziali temporanee. Queste credenziali sono essenziali per accedere a vari servizi AWS, tra cui ma non limitati a Amazon S3 e DynamoDB. Una caratteristica notevole dei pool di identità è il supporto sia per gli utenti ospiti anonimi che per una serie di fornitori di identità per l'autenticazione degli utenti. I fornitori di identità supportati includono:
Pool di utenti Amazon Cognito
Opzioni di accesso tramite social come Facebook, Google, Accedi con Amazon e Accedi con Apple
Fornitori conformi a OpenID Connect (OIDC)
Fornitori di identità SAML (Security Assertion Markup Language)
Identità autenticate dagli sviluppatori
Cognito Sync
Per generare sessioni di Identity Pool, è prima necessario generare un ID di identità. Questo ID di identità è l'identificazione della sessione di quell'utente. Queste identificazioni possono avere fino a 20 set di dati che possono memorizzare fino a 1 MB di coppie chiave-valore.
Questo è utile per mantenere informazioni di un utente (che utilizzerà sempre lo stesso ID di identità).
Inoltre, il servizio cognito-sync è il servizio che consente di gestire e sincronizzare queste informazioni (nei set di dati, inviando informazioni in stream e messaggi SNS...).
Strumenti per il pentesting
Pacu, il framework di sfruttamento AWS, include ora i moduli "cognito__enum" e "cognito__attack" che automatizzano l'enumerazione di tutti gli asset Cognito in un account e segnalano configurazioni deboli, attributi utente utilizzati per il controllo degli accessi, ecc., e automatizzano anche la creazione di utenti (incluso il supporto MFA) e l'escalation dei privilegi basata su attributi personalizzabili modificabili, credenziali di pool di identità utilizzabili, ruoli assumibili nei token di identità, ecc.
Per una descrizione delle funzioni dei moduli, consultare la parte 2 del post del blog. Per le istruzioni di installazione, consultare la pagina principale di Pacu.
Utilizzo
Esempio di utilizzo di cognito__attack per tentare la creazione di un utente e tutti i vettori di privilegi contro un determinato pool di identità e un client pool di utenti:
Esempio di utilizzo di cognito__enum per raccogliere tutti i pool di utenti, client pool di utenti, pool di identità, utenti, ecc. visibili nell'account AWS corrente:
Cognito Scanner è uno strumento CLI in python che implementa diversi attacchi su Cognito, inclusa la creazione indesiderata di account e l'escalation del pool di identità.
Installazione
Utilizzo
Per ulteriori informazioni controlla https://github.com/padok-team/cognito-scanner
Accesso ai Ruoli IAM
Non autenticato
L'unica cosa di cui un attaccante ha bisogno per ottenere le credenziali AWS in un'app Cognito come utente non autenticato è l'ID del Pool di Identità, e questo ID deve essere codificato nell'applicazione web/mobile affinché possa utilizzarlo. Un ID ha un formato simile a questo: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(non è soggetto a forza bruta).
Il ruolo IAM Cognito non autenticato creato tramite è chiamato di default Cognito_<Nome Pool di Identità>Unauth_Role
Se trovi un ID del Pool di Identità codificato e consente agli utenti non autenticati, puoi ottenere le credenziali AWS con:
Oppure potresti utilizzare i seguenti comandi aws cli:
Si noti che per impostazione predefinita un utente Cognito non autenticato NON PUÒ avere alcun permesso, anche se è stato assegnato tramite una policy. Controlla la sezione seguente.
Flusso di autenticazione avanzato vs di base
La sezione precedente ha seguito il flusso di autenticazione avanzato predefinito. Questo flusso imposta una policy di sessione restrittiva al ruolo IAM generato per la sessione. Questa policy consentirà solo alla sessione di utilizzare i servizi da questo elenco (anche se il ruolo aveva accesso ad altri servizi).
Tuttavia, c'è un modo per aggirare questo, se l'Identity pool ha abilitato il "Flusso di base (Classico)", l'utente sarà in grado di ottenere una sessione utilizzando quel flusso che non avrà quella policy di sessione restrittiva.
Se ricevi questo errore, è perché il flusso di base non è abilitato (predefinito)
Si è verificato un errore (InvalidParameterException) durante la chiamata all'operazione GetOpenIdToken: il flusso di base (classico) non è abilitato, utilizzare il flusso avanzato.
Avendo un set di credenziali IAM dovresti controllare a quali accessi hai diritto e provare a escalare i privilegi.
Autenticato
Ricorda che gli utenti autenticati probabilmente avranno autorizzazioni diverse, quindi se puoi registrarti nell'app, prova a farlo e ottieni le nuove credenziali.
Potrebbero anche essere disponibili ruoli per utenti autenticati che accedono al Pool di identità.
Per questo potresti avere bisogno di accedere al fornitore di identità. Se si tratta di un Cognito User Pool, forse puoi abusare del comportamento predefinito e creare un nuovo utente tu stesso.
Il ruolo IAM Cognito autenticato creato tramite è chiamato per impostazione predefinita Cognito_<Nome del pool di identità>Auth_Role
In ogni caso, l'esempio seguente presuppone che tu abbia già effettuato l'accesso all'interno di un Cognito User Pool utilizzato per accedere al Pool di identità (non dimenticare che potrebbero essere configurati anche altri tipi di fornitori di identità).
È possibile configurare ruoli IAM diversi a seconda del fornitore di identità con cui l'utente effettua l'accesso o addirittura solo a seconda dell'utente (utilizzando claim). Pertanto, se hai accesso a diversi utenti attraverso lo stesso o diversi fornitori, potrebbe essere utile effettuare l'accesso e accedere ai ruoli IAM di tutti loro.
Last updated