Cognito Identity Pools
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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, inclusi, ma non limitati a, Amazon S3 e DynamoDB. Una caratteristica notevole dei pool di identità è il loro supporto sia per utenti ospiti anonimi che per una gamma di provider di identità per l'autenticazione degli utenti. I provider di identità supportati includono:
Pool di utenti Amazon Cognito
Opzioni di accesso sociale come Facebook, Google, Login con Amazon e Accedi con Apple
Provider conformi a OpenID Connect (OIDC)
Provider di identità SAML (Security Assertion Markup Language)
Identità autenticate dagli sviluppatori
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 dataset che possono memorizzare fino a 1MB di coppie chiave-valore.
Questo è utile per mantenere informazioni su 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 dataset, inviando informazioni in stream e messaggi SNS...).
Pacu, il framework di sfruttamento AWS, ora include i moduli "cognito__enum" e "cognito__attack" che automatizzano l'enumerazione di tutte le risorse 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 assunibili nei token id, ecc.
Per una descrizione delle funzioni dei moduli, vedere la parte 2 del blog post. Per le istruzioni di installazione, vedere la pagina principale di Pacu.
Esempio di utilizzo di cognito__attack per tentare la creazione di un utente e tutti i vettori di privesc contro un dato pool di identità e client di pool utente:
Esempio di utilizzo di cognito__enum per raccogliere tutti i pool utenti, i client dei pool utenti, i pool di identità, gli utenti, ecc. visibili nell'attuale account AWS:
Cognito Scanner è uno strumento CLI in python che implementa diversi attacchi su Cognito, inclusa la creazione non desiderata di account e l'escalation dei pool di identità.
Per ulteriori informazioni controlla https://github.com/padok-team/cognito-scanner
L'unica cosa che un attaccante deve sapere per ottenere credenziali AWS in un'app Cognito come utente non autenticato è il ID del pool di identità, e questo ID deve essere hardcoded nell'applicazione web/mobile per poterlo utilizzare. Un ID appare così: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(non è bruteforceabile).
Il ruolo IAM Cognito non autenticato creato tramite è chiamato per impostazione predefinita Cognito_<Nome del pool di identità>Unauth_Role
Se trovi un ID del pool di identità hardcoded e consente utenti non autenticati, puoi ottenere credenziali AWS con:
Oppure puoi usare i seguenti comandi aws cli:
Nota che per impostazione predefinita un cognito utente non autenticato NON PUÒ avere alcun permesso, anche se assegnato tramite una policy. Controlla la sezione seguente.
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 generato. Questa policy permetterà solo alla sessione di utilizzare i servizi di questo elenco (anche se il ruolo aveva accesso ad altri servizi).
Tuttavia, c'è un modo per aggirare questo, se il pool di identità 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, si prega di utilizzare il flusso avanzato.
Avendo un insieme di credenziali IAM, dovresti controllare quali accessi hai e provare a escalare i privilegi.
Ricorda che gli utenti autenticati potrebbero ricevere permessi diversi, quindi se puoi registrarti all'interno dell'app, prova a farlo e ottieni le nuove credenziali.
Potrebbero esserci anche ruoli disponibili per utenti autenticati che accedono al Pool di Identità.
Per questo potresti aver bisogno di avere accesso al fornitore di identità. Se si tratta di un Cognito User Pool, forse puoi sfruttare il comportamento predefinito e creare un nuovo utente tu stesso.
Il ruolo IAM Cognito autenticato creato tramite si chiama per impostazione predefinita Cognito_<Nome del Pool di Identità>Auth_Role
Comunque, il seguente esempio presuppone che tu sia già loggato 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 è loggato o anche semplicemente a seconda dell'utente (utilizzando le affermazioni). Pertanto, se hai accesso a diversi utenti tramite lo stesso o diversi fornitori, potrebbe valere la pena effettuare il login e accedere ai ruoli IAM di tutti loro.
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)