GCP - Container Privesc

हैकट्रिक्स का समर्थन करें

container

container.clusters.get

यह अनुमति कुबरनेटीज़ क्लस्टर के लिए क्रेडेंशियल इकट्ठा करने की अनुमति देती है जैसे:

gcloud container clusters get-credentials <cluster_name> --zone <zone>

बिना अतिरिक्त अनुमतियों के, प्रमाण-पत्र बहुत ही मौलिक हो सकते हैं जैसे आप कुछ संसाधनों की सूची बस देख सकते हैं, लेकिन ये वातावरण में गलत-विन्यासों को खोजने के लिए उपयोगी हो सकते हैं।

ध्यान दें कि कुबरनेटीज़ क्लस्टर निजी रूप से कॉन्फ़िगर किए जा सकते हैं, जो इंटरनेट से क्यूब-एपीआई सर्वर तक पहुँच को निषेधित कर देगा।

अगर आपके पास यह अनुमति नहीं है तो आप अभी भी क्लस्टर तक पहुँच सकते हैं, लेकिन आपको अपना खुद का कुबेक्टल कॉन्फ़िग फ़ाइल बनानी होगी जिसमें क्लस्टर की जानकारी होगी। एक नया उत्पन्न हुआ ऐसा दिखता है:

apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMRENDQXBTZ0F3SUJBZ0lRRzNaQmJTSVlzeVRPR1FYODRyNDF3REFOQmdrcWhraUc5dzBCQVFzRkFEQXYKTVMwd0t3WURWUVFERXlRMk9UQXhZVEZoWlMweE56ZGxMVFF5TkdZdE9HVmhOaTAzWVdFM01qVmhNR05tTkdFdwpJQmNOTWpJeE1qQTBNakl4T1RJMFdoZ1BNakExTWpFeE1qWXlNekU1TWpSYU1DOHhMVEFyQmdOVkJBTVRKRFk1Ck1ERmhNV0ZsTFRFM04yVXROREkwWmkwNFpXRTJMVGRoWVRjeU5XRXdZMlkwWVRDQ0FhSXdEUVlKS29aSWh2Y04KQVFFQkJRQURnZ0dQQURDQ0FZb0NnZ0dCQU00TWhGemJ3Y3VEQXhiNGt5WndrNEdGNXRHaTZmb0pydExUWkI4Rgo5TDM4a2V2SUVWTHpqVmtoSklpNllnSHg4SytBUHl4RHJQaEhXMk5PczFNMmpyUXJLSHV6M0dXUEtRUmtUWElRClBoMy9MMDVtbURwRGxQK3hKdzI2SFFqdkE2Zy84MFNLakZjRXdKRVhZbkNMMy8yaFBFMzdxN3hZbktwTWdKVWYKVnoxOVhwNEhvbURvOEhUN2JXUTJKWTVESVZPTWNpbDhkdDZQd3FUYmlLNjJoQzNRTHozNzNIbFZxaiszNy90RgpmMmVwUUdFOG90a0VVOFlHQ3FsRTdzaVllWEFqbUQ4bFZENVc5dk1RNXJ0TW8vRHBTVGNxRVZUSzJQWk1rc0hyCmMwbGVPTS9LeXhnaS93TlBRdW5oQ2hnRUJIZTVzRmNxdmRLQ1pmUFovZVI1Qk0vc0w1WFNmTE9sWWJLa2xFL1YKNFBLNHRMVmpiYVg1VU9zMUZIVXMrL3IyL1BKQ2hJTkRaVTV2VjU0L1c5NWk4RnJZaUpEYUVGN0pveXJvUGNuMwpmTmNjQ2x1eGpOY1NsZ01ISGZKRzZqb0FXLzB0b2U3ek05RHlQOFh3NW44Zm5lQm5aVTFnYXNKREZIYVlZbXpGCitoQzFETmVaWXNibWNxOGVPVG9LOFBKRjZ3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQWdRd0R3WUQKVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVU5UkhvQXlxY3RWSDVIcmhQZ1BjYzF6Sm9kWFV3RFFZSgpLb1pJaHZjTkFRRUxCUUFEZ2dHQkFLbnp3VEx0QlJBVE1KRVB4TlBNbmU2UUNqZDJZTDgxcC9oeVc1eWpYb2w5CllkMTRRNFVlVUJJVXI0QmJadzl0LzRBQ3ZlYUttVENaRCswZ2wyNXVzNzB3VlFvZCtleVhEK2I1RFBwUUR3Z1gKbkJLcFFCY1NEMkpvZ29tT3M3U1lPdWVQUHNrODVvdWEwREpXLytQRkY1WU5ublc3Z1VLT2hNZEtKcnhuYUVGZAprVVl1TVdPT0d4U29qVndmNUsyOVNCbGJ5YXhDNS9tOWkxSUtXV2piWnZPN0s4TTlYLytkcDVSMVJobDZOSVNqCi91SmQ3TDF2R0crSjNlSjZneGs4U2g2L28yRnhxZWFNdDladWw4MFk4STBZaGxXVmlnSFMwZmVBUU1NSzUrNzkKNmozOWtTZHFBYlhPaUVOMzduOWp2dVlNN1ZvQzlNUk1oYUNyQVNhR2ZqWEhtQThCdlIyQW5iQThTVGpQKzlSMQp6VWRpK3dsZ0V4bnFvVFpBcUVHRktuUTlQcjZDaDYvR0xWWStqYXhuR3lyUHFPYlpNZTVXUDFOUGs4NkxHSlhCCjc1elFvanEyRUpxanBNSjgxT0gzSkxOeXRTdmt4UDFwYklxTzV4QUV0OWxRMjh4N28vbnRuaWh1WmR6M0lCRU8KODdjMDdPRGxYNUJQd0hIdzZtKzZjUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
server: https://34.123.141.28
name: gke_security-devbox_us-central1_autopilot-cluster-1
contexts:
- context:
cluster: gke_security-devbox_us-central1_autopilot-cluster-1
user: gke_security-devbox_us-central1_autopilot-cluster-1
name: gke_security-devbox_us-central1_autopilot-cluster-1
current-context: gke_security-devbox_us-central1_autopilot-cluster-1
kind: Config
preferences: {}
users:
- name: gke_security-devbox_us-central1_autopilot-cluster-1
user:
auth-provider:
config:
access-token: <access token>
cmd-args: config config-helper --format=json
cmd-path: gcloud
expiry: "2022-12-06T01:13:11Z"
expiry-key: '{.credential.token_expiry}'
token-key: '{.credential.access_token}'
name: gcp

container.roles.escalate | container.clusterRoles.escalate

कुबरनेटीस डिफ़ॉल्ट रूप से प्रिंसिपल्स को रोल्स और क्लस्टर रोल्स बनाने या अपडेट करने से रोकता है जिनमें प्रिंसिपल के पास से अधिक अनुमतियाँ हो। हालांकि, ऐसी अनुमतियों वाले एक GCP प्रिंसिपल को रोल्स/क्लस्टर रोल्स बनाने/अपडेट करने की अनुमति होगी जिनमें उसके पास से अधिक अनुमतियाँ हैं, इस तरह कुबरनेटीस की इस व्यवहार के खिलाफ सुरक्षा को छलना कर सकता है।

container.roles.create और/या container.roles.update या container.clusterRoles.create और/या container.clusterRoles.update भी इन विशेषाधिकार उन्हें करने के लिए आवश्यक हैं।

container.roles.bind | container.clusterRoles.bind

कुबरनेटीस डिफ़ॉल्ट रूप से प्रिंसिपल्स को रोल बाइंडिंग्स और क्लस्टर रोल बाइंडिंग्स बनाने या अपडेट करने से रोकता है जिनमें प्रिंसिपल के पास से अधिक अनुमतियाँ हो। हालांकि, ऐसी अनुमतियों वाले एक GCP प्रिंसिपल को रोल बाइंडिंग्स/क्लस्टर रोल बाइंडिंग्स बनाने/अपडेट करने की अनुमति होगी जिनमें उसके पास से अधिक अनुमतियाँ हैं, इस तरह कुबरनेटीस की इस व्यवहार के खिलाफ सुरक्षा को छलना कर सकता है।

container.roleBindings.create और/या container.roleBindings.update या container.clusterRoleBindings.create और/या container.clusterRoleBindings.update भी इन विशेषाधिकार उन्हें करने के लिए आवश्यक हैं।

container.cronJobs.create | container.cronJobs.update | container.daemonSets.create | container.daemonSets.update | container.deployments.create | container.deployments.update | container.jobs.create | container.jobs.update | container.pods.create | container.pods.update | container.replicaSets.create | container.replicaSets.update | container.replicationControllers.create | container.replicationControllers.update | container.scheduledJobs.create | container.scheduledJobs.update | container.statefulSets.create | container.statefulSets.update

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

जैसे ही हम एक GCP वातावरण में हैं, आपको मेटाडेटा सेवा से नोडपूल GCP SA प्राप्त करने की भी संभावना है और GCP में उन्नतियों को छलने की अनुमति मिलेगी (डिफ़ॉल्ट रूप से कंप्यूट एसए का उपयोग किया जाता है)।

container.secrets.get | container.secrets.list

इन अनुमतियों के साथ इस पृष्ठ में विवरणित, आप सभी कुबरनेटीस के एसए के टोकन पढ़ सकते हैं, इसलिए आप उन्हें उन्नति कर सकते हैं।

container.pods.exec

इस अनुमति के साथ आप पॉड में एक्सीक्यूट कर सकेंगे, जिससे आपको सभी पॉड में चल रहे कुबरनेटीस एसए तक पहुंच मिलेगी जिससे आप K8s के भीतर उन्नतियों को छल सकते हैं, लेकिन आप नोडपूल के GCP सेवा खाते को चुरा भी सकेंगे, GCP में उन्नतियों को छलाने की अनुमति मिलेगी।

container.pods.portForward

जैसे ही इस पृष्ठ में विवरणित, इन अनुमतियों के साथ आप पॉड में चल रही स्थानीय सेवाओं तक पहुंच सकते हैं जो आपको कुबरनेटीस में उन्नतियों को छलाने की अनुमति देने के लिए (और GCP में अगर आप किसी तरह से मेटाडेटा सेवा से बात करने में सफल हो जाते हैं)

container.serviceAccounts.createToken

इस अनुमति के नाम के कारण, ऐसा लगता है कि यह आपको K8s सेवा खातों के टोकन उत्पन्न करने की अनुमति देगा, इसलिए आप किसी भी SA में उन्नति कर सकेंगे। हालांकि, मैंने कोई एपीआई एंडपॉइंट नहीं मिला, इसलिए अगर आपको मिलता है तो मुझे बताएं।

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

ये अनुमतियाँ आपको कुबरनेटीस में उन्नतियों को छलाने की अनुमति देने के साथ-साथ, अधिक संभावना है कि आप उन्हें क्लस्टर में स्थायी रूप से उपयोग कर सकते हैं। अधिक जानकारी के लिए इस लिंक का पालन करें.

HackTricks का समर्थन करें

Last updated