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)
Cognito
Per ulteriori informazioni su Cognito, controlla:
AWS - Cognito EnumRecupero 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
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Con questa autorizzazione puoi concedere qualsiasi ruolo di Cognito agli utenti autenticati/non autenticati dell'applicazione Cognito.
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
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.
È anche possibile abusare di questa autorizzazione per consentire l'autenticazione di base:
Impatto Potenziale: Compromettere il ruolo IAM autenticato configurato all'interno del pool di identità.
cognito-idp:AdminAddUserToGroup
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:
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
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:
Impatto Potenziale: Escalation dei privilegi ad altri ruoli IAM di Cognito.
cognito-idp:AdminConfirmSignUp
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.
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
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.
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
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.
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
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
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).
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
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.
SetUserMFAPreference: Simile al precedente, questo permesso può essere utilizzato per impostare le preferenze MFA di un utente per eludere la protezione MFA.
SetUserPoolMfaConfig: Simile al precedente, questo permesso può essere utilizzato per impostare le preferenze MFA di un pool di utenti per eludere la protezione MFA.
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
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.
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
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!.
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
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Un attaccante potrebbe abusare di questa autorizzazione per creare utenti caricando un file csv con nuovi utenti.
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
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.
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:
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 un'escalation di privilegi.
Installazione
Utilizzo
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)
Last updated