AWS - Cognito Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cognito के बारे में अधिक जानकारी के लिए देखें:
AWS - Cognito Enumचूंकि Cognito IAM भूमिका क्रेडेंशियल को प्रमाणित और अप्रमाणित उपयोगकर्ताओं दोनों को प्रदान कर सकता है, यदि आप किसी एप्लिकेशन का Identity Pool ID ढूंढ लेते हैं (जो कि इसमें हार्डकोडेड होना चाहिए) तो आप नए क्रेडेंशियल प्राप्त कर सकते हैं और इसलिए प्रिवेस्क (एक AWS खाते के अंदर जहां आपके पास पहले कोई क्रेडेंशियल नहीं थे) प्राप्त कर सकते हैं।
अधिक जानकारी के लिए इस पृष्ठ की जांच करें.
संभावित प्रभाव: अप्रमाणित उपयोगकर्ताओं से जुड़े सेवाओं की भूमिका पर सीधे प्रिवेस्क (और संभवतः प्रमाणित उपयोगकर्ताओं से जुड़े एक पर)।
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
इस अनुमति के साथ आप प्रमाणित/अप्रमाणित उपयोगकर्ताओं को Cognito ऐप के लिए कोई भी Cognito भूमिका प्रदान कर सकते हैं।
यदि cognito ऐप अनधिकृत उपयोगकर्ताओं को सक्षम नहीं करता है, तो आपको इसे सक्षम करने के लिए cognito-identity:UpdateIdentityPool
अनुमति की भी आवश्यकता हो सकती है।
संभावित प्रभाव: किसी भी cognito भूमिका के लिए सीधे privesc।
cognito-identity:update-identity-pool
इस अनुमति के साथ एक हमलावर उदाहरण के लिए एक Cognito उपयोगकर्ता पूल सेट कर सकता है जो उसके नियंत्रण में है या किसी अन्य पहचान प्रदाता पर जहां वह इस Cognito पहचान पूल तक पहुँचने के लिए लॉगिन कर सकता है। फिर, बस उस उपयोगकर्ता प्रदाता पर लॉगिन करने से उसे पहचान पूल में कॉन्फ़िगर की गई प्रमाणित भूमिका तक पहुँचने की अनुमति मिलेगी।
यह अनुमति का दुरुपयोग करके मूल प्रमाणीकरण की अनुमति देना भी संभव है:
संभावित प्रभाव: पहचान पूल के भीतर कॉन्फ़िगर किए गए प्रमाणित IAM भूमिका का समझौता।
cognito-idp:AdminAddUserToGroup
यह अनुमति एक Cognito उपयोगकर्ता को एक Cognito समूह में जोड़ने की अनुमति देती है, इसलिए एक हमलावर इस अनुमति का दुरुपयोग करके अपने नियंत्रण में एक उपयोगकर्ता को अन्य समूहों में जोड़ सकता है जिनके पास बेहतर विशेषताएँ या विभिन्न IAM भूमिकाएँ हैं:
संभावित प्रभाव: अन्य Cognito समूहों और User Pool Groups से जुड़े IAM भूमिकाओं के लिए प्रिवेस्क।
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
इन अनुमतियों के साथ एक हमलावर समूहों को बना/अपडेट कर सकता है हर IAM भूमिका के साथ जिसे एक समझौता किए गए Cognito पहचान प्रदाता द्वारा उपयोग किया जा सकता है और एक समझौता किए गए उपयोगकर्ता को समूह का हिस्सा बना सकता है, उन सभी भूमिकाओं तक पहुंच प्राप्त कर सकता है:
संभावित प्रभाव: अन्य Cognito IAM भूमिकाओं के लिए प्रिवेस्क।
cognito-idp:AdminConfirmSignUp
यह अनुमति साइनअप की पुष्टि करने की अनुमति देती है। डिफ़ॉल्ट रूप से कोई भी Cognito अनुप्रयोगों में साइन इन कर सकता है, यदि इसे छोड़ दिया जाए, तो एक उपयोगकर्ता किसी भी डेटा के साथ एक खाता बना सकता है और इस अनुमति के साथ इसकी पुष्टि कर सकता है।
संभावित प्रभाव: यदि आप एक नया उपयोगकर्ता पंजीकृत कर सकते हैं तो प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका के लिए अप्रत्यक्ष प्रिवेस्क। किसी भी खाते की पुष्टि करने में सक्षम होने पर अन्य ऐप कार्यक्षमताओं के लिए अप्रत्यक्ष प्रिवेस्क।
cognito-idp:AdminCreateUser
यह अनुमति एक हमलावर को उपयोगकर्ता पूल के अंदर एक नया उपयोगकर्ता बनाने की अनुमति देगी। नया उपयोगकर्ता सक्षम के रूप में बनाया गया है, लेकिन इसे अपना पासवर्ड बदलने की आवश्यकता होगी।
संभावित प्रभाव: प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका तक सीधे प्रिवेस्क। किसी भी उपयोगकर्ता को बनाने में सक्षम होने के कारण अन्य ऐप कार्यक्षमताओं के लिए अप्रत्यक्ष प्रिवेस्क।
cognito-idp:AdminEnableUser
यह अनुमति एक बहुत ही सीमांत परिदृश्य में मदद कर सकती है जहां एक हमलावर ने एक अक्षम उपयोगकर्ता के क्रेडेंशियल्स पाए हैं और उसे फिर से सक्षम करने की आवश्यकता है।
संभावित प्रभाव: यदि हमलावर के पास एक निष्क्रिय उपयोगकर्ता के लिए क्रेडेंशियल्स हैं, तो प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका और उपयोगकर्ता की अनुमतियों के लिए अप्रत्यक्ष प्रिवेस्क।
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
यह अनुमति विधि ADMIN_USER_PASSWORD_AUTH** के साथ लॉगिन करने की अनुमति देती है।** अधिक जानकारी के लिए लिंक का पालन करें।
cognito-idp:AdminSetUserPassword
यह अनुमति एक हमलावर को किसी भी उपयोगकर्ता का पासवर्ड बदलने की अनुमति देगी, जिससे वह किसी भी उपयोगकर्ता (जिसके पास MFA सक्षम नहीं है) का अनुकरण कर सकेगा।
संभावित प्रभाव: सीधे प्रिवेस्क किसी भी उपयोगकर्ता के लिए, इसलिए प्रत्येक उपयोगकर्ता के सदस्यता वाले सभी समूहों तक पहुंच और पहचान पूल प्रमाणित IAM भूमिका तक पहुंच।
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: एक हमलावर इस अनुमति का दुरुपयोग करके अपने नियंत्रण में एक मोबाइल फोन को एक उपयोगकर्ता के SMS MFA के रूप में सेट कर सकता है।
SetUserMFAPreference: पिछले वाले के समान, यह अनुमति एक उपयोगकर्ता के MFA प्राथमिकताओं को सेट करने के लिए उपयोग की जा सकती है ताकि MFA सुरक्षा को बायपास किया जा सके।
SetUserPoolMfaConfig: पिछले वाले के समान, यह अनुमति एक उपयोगकर्ता पूल के MFA प्राथमिकताओं को सेट करने के लिए उपयोग की जा सकती है ताकि MFA सुरक्षा को बायपास किया जा सके।
UpdateUserPool: यह उपयोगकर्ता पूल को MFA नीति बदलने के लिए अपडेट करना भी संभव है। यहाँ cli देखें।
Potential Impact: अप्रत्यक्ष प्रिवेस्क किसी भी उपयोगकर्ता के लिए जिसे हमलावर जानता है कि उसके पास क्रेडेंशियल हैं, यह MFA सुरक्षा को बायपास करने की अनुमति दे सकता है।
cognito-idp:AdminUpdateUserAttributes
इस अनुमति के साथ एक हमलावर किसी उपयोगकर्ता के नियंत्रण में ईमेल या फोन नंबर या किसी अन्य विशेषता को बदल सकता है ताकि एक अंतर्निहित एप्लिकेशन में अधिक विशेषाधिकार प्राप्त करने का प्रयास किया जा सके। यह एक ईमेल या फोन नंबर को बदलने और इसे सत्यापित के रूप में सेट करने की अनुमति देता है।
संभावित प्रभाव: संभावित अप्रत्यक्ष प्रिवेस्क underlying application में जो Cognito User Pool का उपयोग करता है जो उपयोगकर्ता विशेषताओं के आधार पर विशेषाधिकार देता है।
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
इस अनुमति के साथ एक हमलावर एक नया User Pool Client बना सकता है जो पहले से मौजूद पूल क्लाइंट्स की तुलना में कम प्रतिबंधित है। उदाहरण के लिए, नया क्लाइंट किसी भी प्रकार के तरीके से प्रमाणीकरण की अनुमति दे सकता है, कोई रहस्य नहीं हो सकता, टोकन रद्दीकरण अक्षम हो सकता है, टोकन को लंबे समय तक मान्य रहने की अनुमति दे सकता है...
यदि एक मौजूदा क्लाइंट को संशोधित किया जाए तो वही किया जा सकता है।
कमांड लाइन (या अपडेट एक) में आप सभी विकल्प देख सकते हैं, इसे चेक करें!
संभावित प्रभाव: उपयोगकर्ता पूल द्वारा उपयोग किए जाने वाले पहचान पूल अधिकृत उपयोगकर्ता के लिए संभावित अप्रत्यक्ष प्रिवेस्क, एक नया क्लाइंट बनाकर जो सुरक्षा उपायों को ढीला करता है और एक हमलावर को एक उपयोगकर्ता के साथ लॉगिन करने की अनुमति देता है जिसे वह बनाने में सक्षम था।
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
एक हमलावर इस अनुमति का दुरुपयोग करके नए उपयोगकर्ताओं के साथ एक csv अपलोड करके उपयोगकर्ता बना सकता है।
(यदि आप एक नई आयात नौकरी बनाते हैं, तो आपको iam passrole अनुमति की भी आवश्यकता हो सकती है, मैंने इसका परीक्षण नहीं किया है)।
संभावित प्रभाव: प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका तक सीधा प्रिवेस्क। किसी भी उपयोगकर्ता को बनाने की क्षमता के साथ अन्य ऐप कार्यक्षमताओं तक अप्रत्यक्ष प्रिवेस्क।
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
एक हमलावर एक नया पहचान प्रदाता बना सकता है ताकि वह इस प्रदाता के माध्यम से लॉगिन कर सके।
संभावित प्रभाव: प्रमाणित उपयोगकर्ताओं के लिए पहचान पूल IAM भूमिका में सीधे प्रिवेस्क। किसी भी उपयोगकर्ता को बनाने में सक्षम होने के कारण अन्य ऐप कार्यक्षमताओं के लिए अप्रत्यक्ष प्रिवेस्क।
यह पहचान पूल की भूमिकाओं में डिफ़ॉल्ट रूप से एक बहुत सामान्य अनुमति है। भले ही अनुमतियों में वाइल्डकार्ड हमेशा बुरा लगता है (विशेष रूप से AWS से आने पर), दी गई अनुमतियाँ हमलावर के दृष्टिकोण से सुपर उपयोगी नहीं हैं।
यह अनुमति पहचान पूल और पहचान आईडी के भीतर उपयोगकर्ता जानकारी पढ़ने की अनुमति देती है (जो संवेदनशील जानकारी नहीं है)। पहचान आईडी में डेटासेट्स असाइन किए जा सकते हैं, जो सत्रों की जानकारी होती है (AWS इसे सहेजे गए खेल के रूप में परिभाषित करता है)। यह संभव है कि इसमें कुछ प्रकार की संवेदनशील जानकारी हो (लेकिन संभावना काफी कम है)। आप इस जानकारी तक पहुँचने के लिए सूचीकरण पृष्ठ में देख सकते हैं।
एक हमलावर इन अनुमतियों का उपयोग करके इन डेटासेट्स पर परिवर्तन प्रकाशित करने वाले एक Cognito स्ट्रीम में खुद को नामांकित कर सकता है या cognito घटनाओं पर ट्रिगर होने वाले एक लैम्ब्डा का उपयोग कर सकता है। मैंने इसे उपयोग में नहीं देखा है, और मैं यहाँ संवेदनशील जानकारी की अपेक्षा नहीं करूंगा, लेकिन यह असंभव नहीं है।
Pacu, AWS शोषण ढांचा, अब "cognito__enum" और "cognito__attack" मॉड्यूल शामिल करता है जो एक खाते में सभी Cognito संपत्तियों की सूचीकरण को स्वचालित करता है और कमजोर कॉन्फ़िगरेशन, उपयोगकर्ता विशेषताएँ जो पहुँच नियंत्रण के लिए उपयोग की जाती हैं, आदि को चिह्नित करता है, और उपयोगकर्ता निर्माण (MFA समर्थन सहित) और संशोधित कस्टम विशेषताओं, उपयोग योग्य पहचान पूल क्रेडेंशियल्स, आईडी टोकन में असुमेबल भूमिकाओं के आधार पर प्रिवेस्क को भी स्वचालित करता है।
मॉड्यूल के कार्यों का विवरण ब्लॉग पोस्ट के भाग 2 में देखें। स्थापना निर्देशों के लिए मुख्य Pacu पृष्ठ देखें।
एक दिए गए पहचान पूल और उपयोगकर्ता पूल क्लाइंट के खिलाफ उपयोगकर्ता निर्माण और सभी प्रिवेस्क वेक्टरों का प्रयास करने के लिए नमूना cognito__attack उपयोग:
सैंपल cognito__enum का उपयोग वर्तमान AWS खाते में दृश्य सभी उपयोगकर्ता पूल, उपयोगकर्ता पूल क्लाइंट, पहचान पूल, उपयोगकर्ता आदि को इकट्ठा करने के लिए:
Cognito Scanner एक CLI टूल है जो पायथन में लिखा गया है, जो Cognito पर विभिन्न हमलों को लागू करता है, जिसमें privesc escalation शामिल है।
For more information check https://github.com/padok-team/cognito-scanner
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)