AWS - Cognito Privesc
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)
Per ulteriori informazioni su Cognito controlla:
AWS - Cognito EnumPoiché Cognito può concedere credenziali di ruolo IAM sia a utenti autenticati che non autenticati, se riesci a localizzare l'ID dell'Identity Pool di un'applicazione (dovrebbe essere hardcoded in essa) puoi ottenere nuove credenziali e quindi privesc (all'interno di un account AWS in cui probabilmente non avevi nemmeno alcuna credenziale precedentemente).
Per ulteriori informazioni controlla questa pagina.
Impatto Potenziale: Privesc diretto al ruolo dei servizi associato agli utenti non autenticati (e probabilmente a quello associato agli utenti autenticati).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Con questo permesso puoi concedere qualsiasi ruolo cognito agli utenti autenticati/non autenticati dell'app cognito.
Se l'app cognito non ha abilitati gli utenti non autenticati, potresti aver bisogno anche del permesso cognito-identity:UpdateIdentityPool
per abilitarlo.
Impatto Potenziale: Privesc diretto a qualsiasi ruolo cognito.
cognito-identity:update-identity-pool
Un attaccante con questo permesso potrebbe impostare, ad esempio, un Cognito User Pool sotto il suo controllo o qualsiasi altro provider di identità dove può accedere come modo per accedere a questo Cognito Identity Pool. Poi, semplicemente accedere a quel provider di utenti gli permetterà di accedere al ruolo autenticato configurato nell'Identity Pool.
È anche possibile abusare di questo permesso per consentire l'autenticazione di base:
Impatto Potenziale: Compromettere il ruolo IAM autenticato configurato all'interno del pool di identità.
cognito-idp:AdminAddUserToGroup
Questo permesso consente di aggiungere un utente Cognito a un gruppo Cognito, quindi un attaccante potrebbe abusare di questo permesso per aggiungere un utente sotto il suo controllo ad altri gruppi con privilegi migliori o ruoli IAM diversi:
Impatto Potenziale: Privesc ad altri gruppi Cognito e ruoli IAM associati ai Gruppi del Pool Utenti.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Un attaccante con questi permessi potrebbe creare/aggiornare gruppi con ogni ruolo IAM che può essere utilizzato da un Cognito Identity Provider compromesso e rendere un utente compromesso parte del gruppo, accedendo a tutti quei ruoli:
Impatto Potenziale: Privesc ad altri ruoli IAM di Cognito.
cognito-idp:AdminConfirmSignUp
Questo permesso consente di verificare una registrazione. Per impostazione predefinita, chiunque può accedere alle applicazioni Cognito; se ciò viene lasciato, un utente potrebbe creare un account con qualsiasi dato e verificarlo con questo permesso.
Impatto Potenziale: Privesc indiretto al ruolo IAM del pool di identità per utenti autenticati se puoi registrare un nuovo utente. Privesc indiretto ad altre funzionalità dell'app potendo confermare qualsiasi account.
cognito-idp:AdminCreateUser
Questo permesso 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 propria password.
Impatto Potenziale: Privesc diretto al ruolo IAM del pool di identità per utenti autenticati. Privesc indiretto ad altre funzionalità dell'app potendo creare qualsiasi utente.
cognito-idp:AdminEnableUser
Questa autorizzazione può aiutare in uno scenario molto particolare in cui un attaccante ha trovato le credenziali di un utente disabilitato e ha bisogno di riattivarlo.
Impatto Potenziale: Privesc indiretto al ruolo IAM del pool di identità per utenti autenticati e permessi dell'utente se l'attaccante avesse credenziali per un utente disabilitato.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Questo permesso consente di accedere con il metodo ADMIN_USER_PASSWORD_AUTH. Per ulteriori informazioni segui il link.
cognito-idp:AdminSetUserPassword
Questo permesso consentirebbe a un attaccante di cambiare la password di qualsiasi utente, rendendolo in grado di impersonare qualsiasi utente (che non ha MFA abilitato).
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 dell'Identity Pool.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Un attaccante potrebbe potenzialmente abusare di questo permesso per impostare un telefono cellulare sotto il suo controllo come SMS MFA di un utente.
SetUserMFAPreference: Simile al precedente, questo permesso può essere utilizzato per impostare le preferenze MFA di un utente per bypassare la protezione MFA.
SetUserPoolMfaConfig: Simile a quello precedente, questo permesso può essere utilizzato per impostare le preferenze MFA di un pool utenti per bypassare la protezione MFA.
UpdateUserPool: È anche possibile aggiornare il pool utenti per modificare la politica MFA. Controlla cli qui.
Potential Impact: Privesc indiretto a potenzialmente qualsiasi utente di cui l'attaccante conosce le credenziali, questo potrebbe consentire di bypassare la protezione MFA.
cognito-idp:AdminUpdateUserAttributes
Un attaccante con questo permesso 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. Questo consente di cambiare un'email o un numero di telefono e impostarlo come verificato.
Impatto Potenziale: Potenziale privesc indiretto nell'applicazione sottostante che utilizza Cognito User Pool che conferisce privilegi basati sugli attributi dell'utente.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Un attaccante con questo permesso potrebbe creare un nuovo User Pool Client meno restrittivo rispetto ai client di pool già esistenti. Ad esempio, il nuovo client potrebbe consentire qualsiasi tipo di metodo per autenticarsi, non avere alcun segreto, avere la revoca dei token disabilitata, 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.
Nella linea di comando (o nell' aggiornamento) puoi vedere tutte le opzioni, controllalo!.
Impatto Potenziale: Potenziale privesc indiretto all'utente autorizzato dell'Identity Pool utilizzato dal User Pool creando un nuovo client che allenta le misure di sicurezza e rende possibile a un attaccante di accedere con un utente che è stato in grado di creare.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Un attaccante potrebbe abusare di questo permesso per creare utenti caricando un csv con nuovi utenti.
(Nel caso in cui crei un nuovo lavoro di importazione, potresti anche aver bisogno del permesso iam passrole, non l'ho ancora testato).
Impatto Potenziale: Privesc diretto al ruolo IAM del pool di identità per utenti autenticati. Privesc indiretto ad altre funzionalità dell'app essendo in grado di creare qualsiasi utente.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Un attaccante potrebbe creare un nuovo provider di identità per poter accedere tramite questo provider.
Impatto Potenziale: Privesc diretto al ruolo IAM del pool di identità per utenti autenticati. Privesc indiretto ad altre funzionalità dell'app potendo creare qualsiasi utente.
Questo è un permesso molto comune per impostazione predefinita nei ruoli dei Pool di Identità Cognito. Anche se un carattere jolly nei permessi sembra sempre brutto (soprattutto proveniente da AWS), i permessi concessi non sono super utili da una prospettiva di attaccante.
Questo permesso consente di leggere le informazioni degli utenti 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, che sono informazioni delle sessioni (AWS lo definisce come un gioco salvato). Potrebbe essere possibile che questo contenga qualche tipo di informazione sensibile (ma la probabilità è piuttosto bassa). Puoi trovare nella pagina di enumerazione come accedere a queste informazioni.
Un attaccante potrebbe anche utilizzare questi permessi per iscriversi a uno stream Cognito che pubblica modifiche su questi dataset o a una lambda che si attiva su eventi cognito. Non ho visto questo essere utilizzato, e non mi aspetterei informazioni sensibili qui, ma non è impossibile.
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 del pool di identità utilizzabili, ruoli assunibili nei token id, 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.
Esempio di utilizzo cognito__attack per tentare la creazione di un utente e tutti i vettori di privesc contro un dato pool di identità e client del pool utenti:
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 un'escalation di privilegi.
Per ulteriori informazioni controlla https://github.com/padok-team/cognito-scanner
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)