AWS - Cognito Privesc
Cognito
Per ulteriori informazioni su Cognito, controlla:
pageAWS - Cognito EnumRecupero delle credenziali da Identity Pool
Poiché Cognito può concedere credenziali IAM sia agli utenti autenticati che agli utenti non autenticati, se individui l'ID del pool di identità di un'applicazione (dovrebbe essere codificato all'interno), puoi ottenere nuove credenziali e quindi ottenere privilegi elevati (all'interno di un account AWS in cui probabilmente non avevi nemmeno alcuna credenziale in precedenza).
Per ulteriori informazioni controlla questa pagina.
Impatto potenziale: Privilegi elevati diretti per il ruolo dei servizi associato agli utenti non autenticati (e probabilmente anche per quello associato agli utenti autenticati).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Con questa autorizzazione puoi assegnare qualsiasi ruolo di Cognito agli utenti autenticati/non autenticati dell'applicazione Cognito.
Se l'applicazione Cognito non ha gli utenti non autenticati abilitati, potrebbe essere necessaria anche l'autorizzazione cognito-identity:UpdateIdentityPool
per abilitarli.
Impatto potenziale: Privilegio diretto su 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 provider di identità in cui può effettuare il login come modo per accedere a questo Cognito Identity Pool. Quindi, semplicemente effettuando il login su quel provider 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 diversi ruoli IAM:
Impatto potenziale: Privesc ad altri gruppi Cognito e ruoli IAM collegati ai gruppi del pool 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 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
cognito-idp:AdminConfirmSignUp
Questa autorizzazione consente di verificare una registrazione. Per impostazione predefinita, chiunque può accedere alle applicazioni Cognito, se viene lasciata così, un utente potrebbe creare un account con qualsiasi dato e verificarlo con questa autorizzazione.
Potenziale Impatto: 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.
Potenziale Impatto: Privesc diretto al ruolo IAM del pool di identità per gli utenti autenticati. Privesc indiretto ad altre funzionalità dell'applicazione, consentendo di creare qualsiasi utente.
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
Questo permesso può essere utile in uno scenario molto particolare in cui un attaccante ha trovato le credenziali di un utente disabilitato e ha bisogno di abilitarlo nuovamente.
Potenziale impatto: Privilegio indiretto per l'escalation del ruolo IAM del pool di identità per gli utenti autenticati e le autorizzazioni 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, permettendogli di impersonare quell'utente (che non ha abilitata l'autenticazione multifattore).
Impatto potenziale: Privesc diretta potenzialmente per 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
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Un attaccante potrebbe potenzialmente sfruttare questa autorizzazione per impostare un telefono cellulare sotto il suo controllo come SMS MFA di un utente.
SetUserMFAPreference: Simile al precedente, questa autorizzazione può essere utilizzata per impostare le preferenze MFA di un utente al fine di aggirare la protezione MFA.
SetUserPoolMfaConfig: Simile alla precedente, questa autorizzazione può essere utilizzata per impostare le preferenze MFA di un pool di utenti al fine di aggirare la protezione MFA.
UpdateUserPool: È anche possibile aggiornare il pool degli utenti per modificare la politica MFA. Controlla qui il comando cli.
Potenziale Impatto: Privilegio di escalation indiretto che potrebbe permettere all'attaccante di bypassare la protezione MFA per potenzialmente qualsiasi utente di cui conosce le credenziali.
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
Un attaccante con questa autorizzazione potrebbe modificare l'email, il numero di telefono o qualsiasi altro attributo di un utente sotto il suo controllo per cercare di ottenere maggiori privilegi in un'applicazione sottostante. Ciò consente di modificare un'email o un numero di telefono e impostarlo come verificato.
Potenziale Impatto: Potenziale privesc indiretto nell'applicazione sottostante utilizzando Cognito User Pool che fornisce 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...
La stessa cosa può essere fatta se invece di creare un nuovo client, viene modificato uno già esistente.
Nella riga di comando (o nella riga di comando di aggiornamento) è possibile vedere tutte le opzioni, controllale!.
Potenziale impatto: Potenziale privesc indiretto al pool di identità autorizzato dall'utente del pool, creando un nuovo client che rilassa le misure di sicurezza e consente a un attaccante di 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 sfruttare questa autorizzazione per creare utenti caricando un file CSV con nuovi utenti.
(In caso in cui si crei un nuovo lavoro di importazione, potrebbe essere necessario anche il permesso di passrole iam, non l'ho ancora testato).
Potenziale impatto: 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.
Potenziale Impatto: Privesc diretta al ruolo IAM del pool di identità per gli utenti autenticati. Privesc indiretta ad altre funzionalità dell'applicazione, potendo creare qualsiasi utente.
Analisi di cognito-sync:*
Questa è una autorizzazione molto comune di default nei ruoli dei pool di identità di Cognito. Anche se un carattere jolly in un'autorizzazione sembra sempre brutto (soprattutto provenendo 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 delle identità all'interno dei pool di identità (che non sono informazioni sensibili). Gli ID delle identità potrebbero avere Dataset assegnati ad essi, che sono informazioni sulle sessioni (AWS lo definisce come un gioco salvato). Potrebbe essere possibile che contengano 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 queste autorizzazioni per iscriversi a uno stream di Cognito che pubblica le modifiche su questi dataset o a una funzione lambda che viene attivata dagli eventi di Cognito. Non ho mai visto questo essere 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 di pool di identità utilizzabili, ruoli assumibili nei token di identità, ecc.
Per una descrizione delle funzioni dei moduli, consulta la parte 2 del post del blog. Per le istruzioni di 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 client del pool di utenti:
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 un'escalation di privilegi.
Installazione
Utilizzo
Per ulteriori informazioni, controlla https://github.com/padok-team/cognito-scanner
Last updated