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 network come Facebook, Google, Login with Amazon e Sign in with Apple
Fornitori conformi a OpenID Connect (OIDC)
Fornitori di identità SAML (Security Assertion Markup Language)
Identità autenticate dallo sviluppatore
Cognito Sync
Per generare sessioni di Identity Pool, è necessario prima generare un Identity ID. Questo Identity ID è l'identificazione della sessione di quell'utente. Queste identificazioni possono avere fino a 20 set di dati che possono memorizzare fino a 1MB di coppie chiave-valore.
Questo è utile per conservare le informazioni di un utente (che utilizzerà sempre lo stesso Identity ID).
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 di AWS, include ora i moduli "cognito__enum" e "cognito__attack" che automatizzano l'enumerazione di tutti gli asset di Cognito in un account e segnalano configurazioni deboli, attributi utente utilizzati per il controllo degli accessi, ecc., e automatizzano anche la creazione dell'utente (incluso il supporto MFA) e l'escalation dei privilegi basata su attributi personalizzabili modificabili, credenziali di Identity Pool utilizzabili, ruoli assumibili nei token di identità, ecc.
Per una descrizione delle funzioni dei moduli, vedere la parte 2 del post del blog. Per le istruzioni di installazione, vedere la pagina principale di Pacu.
Utilizzo
Esempio di utilizzo di cognito__attack per tentare la creazione dell'utente e tutti i vettori di escalation dei privilegi contro un determinato Identity Pool e un client di User Pool:
Esempio di utilizzo di cognito__enum per raccogliere tutti i pool di utenti, i client dei pool di utenti, i pool di identità, gli utenti, ecc. visibili nell'account AWS corrente:
Cognito Scanner è un tool 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, visita https://github.com/padok-team/cognito-scanner
Accesso alle IAM Roles
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'Identity Pool ID, e questo ID deve essere codificato nell'applicazione web/mobile per poterlo utilizzare. Un ID ha un formato simile a questo: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(non è possibile forzarne la scoperta tramite attacco di forza bruta).
Il ruolo IAM Cognito non autenticato creato tramite è chiamato di default Cognito_<Nome Identity Pool>Unauth_Role
Se trovi un Identity Pool ID codificato e consente l'accesso agli utenti non autenticati, puoi ottenere le credenziali AWS con:
Oppure puoi utilizzare i seguenti comandi aws cli:
Nota che per impostazione predefinita un utente Cognito 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 per la sessione del ruolo IAM generata. Questa policy consentirà solo alla sessione di utilizzare i servizi da questa lista (anche se il ruolo aveva accesso ad altri servizi).
Tuttavia, c'è un modo per aggirare questo, se l'Identity pool ha abilitato il flusso "Basic (Classic)", 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 insieme di credenziali IAM, dovresti verificare a quale accesso hai diritto e cercare di aumentare i privilegi.
Autenticato
Ricorda che agli utenti autenticati verranno probabilmente concessi permessi diversi, quindi se puoi registrarti nell'app, prova a farlo e ottieni le nuove credenziali.
Potrebbero anche essere disponibili ruoli per gli utenti autenticati che accedono all'Identity Pool.
Per questo potresti aver bisogno di avere accesso al provider di identità. Se si tratta di un Cognito User Pool, potresti sfruttare il comportamento predefinito e creare un nuovo utente tu stesso.
Il ruolo IAM Cognito autenticato creato tramite è chiamato per impostazione predefinita Cognito_<Nome Identity Pool>Auth_Role
In ogni caso, l'esempio seguente presuppone che tu abbia già effettuato l'accesso a un Cognito User Pool utilizzato per accedere all'Identity Pool (non dimenticare che potrebbero essere configurati anche altri tipi di provider di identità).
È possibile configurare ruoli IAM diversi a seconda del provider di identità con cui l'utente effettua l'accesso o addirittura solo in base all'utente (utilizzando le asserzioni). Pertanto, se hai accesso a diversi utenti attraverso lo stesso o diversi provider, potrebbe essere utile effettuare l'accesso e accedere ai ruoli IAM di tutti loro.
Last updated