8.1 KiB
GCP - Network Docker Escape
{{#include ../../../banners/hacktricks-training.md}}
Initial State
इस तकनीक के विवरण वाले दोनों लेखों में, हमलावरों ने GCP द्वारा प्रबंधित Docker कंटेनर के अंदर root एक्सेस प्राप्त करने में सफलता पाई, जिसमें होस्ट नेटवर्क तक पहुंच (और क्षमताएँ CAP_NET_ADMIN और CAP_NET_RAW) शामिल थीं।
Attack Explanation
Google Compute Engine इंस्टेंस पर, नेटवर्क ट्रैफिक की नियमित जांच metadata instance पर कई plain HTTP requests का खुलासा करती है जो 169.254.169.254 पर होती हैं। Google Guest Agent, एक ओपन-सोर्स सेवा, अक्सर ऐसे अनुरोध करती है।
यह एजेंट metadata में परिवर्तनों की निगरानी करने के लिए डिज़ाइन किया गया है। विशेष रूप से, मेटाडेटा में SSH सार्वजनिक कुंजी के लिए एक फ़ील्ड शामिल है। जब मेटाडेटा में एक नई सार्वजनिक SSH कुंजी जोड़ी जाती है, तो एजेंट स्वचालित रूप से इसे .authorized_key फ़ाइल में अधिकृत करता है। यदि आवश्यक हो, तो यह एक नया उपयोगकर्ता भी sudoers में जोड़ सकता है।
एजेंट परिवर्तनों की निगरानी करने के लिए सभी मेटाडेटा मानों को पुनरावृत्त रूप से प्राप्त करने के लिए एक अनुरोध भेजता है (GET /computeMetadata/v1/?recursive=true)। यह अनुरोध मेटाडेटा सर्वर को केवल तब प्रतिक्रिया भेजने के लिए प्रेरित करने के लिए डिज़ाइन किया गया है जब पिछले पुनर्प्राप्ति के बाद मेटाडेटा में कोई परिवर्तन हुआ हो, जिसे एक Etag द्वारा पहचाना जाता है (wait_for_change=true&last_etag=)। इसके अतिरिक्त, एक timeout पैरामीटर (timeout_sec=) शामिल है। यदि निर्दिष्ट समय सीमा के भीतर कोई परिवर्तन नहीं होता है, तो सर्वर अपरिवर्तित मानों के साथ प्रतिक्रिया करता है।
यह प्रक्रिया IMDS (Instance Metadata Service) को 60 सेकंड के बाद प्रतिक्रिया देने की अनुमति देती है यदि कोई कॉन्फ़िगरेशन परिवर्तन नहीं हुआ है, जिससे मेहमान एजेंट के लिए एक संभावित फर्जी कॉन्फ़िगरेशन प्रतिक्रिया इंजेक्ट करने का अवसर बनता है।
एक हमलावर इस स्थिति का लाभ उठाकर Man-in-the-Middle (MitM) attack कर सकता है, IMDS सर्वर से प्रतिक्रिया को स्पूफ करके और एक नई सार्वजनिक कुंजी डालकर। इससे होस्ट पर अनधिकृत SSH एक्सेस सक्षम हो सकता है।
Escape Technique
हालांकि ARP स्पूफिंग Google Compute Engine नेटवर्क पर प्रभावी नहीं है, rshijack का एक संशोधित संस्करण जो Ezequiel द्वारा विकसित किया गया है, पैकेट इंजेक्शन के लिए संचार में SSH उपयोगकर्ता को इंजेक्ट करने के लिए उपयोग किया जा सकता है।
rshijack का यह संस्करण ACK और SEQ नंबरों को कमांड-लाइन तर्कों के रूप में इनपुट करने की अनुमति देता है, जिससे वास्तविक मेटाडेटा सर्वर प्रतिक्रिया से पहले प्रतिक्रिया को स्पूफ करना आसान हो जाता है। इसके अतिरिक्त, एक छोटी Shell script का उपयोग विशेष रूप से तैयार किए गए पेलोड को लौटाने के लिए किया जाता है। यह पेलोड Google Guest Agent को एक उपयोगकर्ता wouter बनाने के लिए ट्रिगर करता है जिसमें .authorized_keys फ़ाइल में एक निर्दिष्ट सार्वजनिक कुंजी होती है।
स्क्रिप्ट एक ही ETag का उपयोग करती है ताकि मेटाडेटा सर्वर तुरंत Google Guest Agent को विभिन्न मेटाडेटा मानों के बारे में सूचित न करे, इस प्रकार प्रतिक्रिया में देरी होती है।
स्पूफिंग को निष्पादित करने के लिए, निम्नलिखित चरण आवश्यक हैं:
- Metadata सर्वर के लिए अनुरोधों की निगरानी करें tcpdump का उपयोग करके:
tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &
एक पंक्ति की तलाश करें जो इस तरह हो:
<TIME> IP <LOCAL_IP>.<PORT> > 169.254.169.254.80: Flags [P.], seq <NUM>:<TARGET_ACK>, ack <TARGET_SEQ>, win <NUM>, length <NUM>: HTTP: GET /computeMetadata/v1/?timeout_sec=<SECONDS>&last_etag=<ETAG>&alt=json&recursive=True&wait_for_change=True HTTP/1.1
- सही ETAG के साथ नकली मेटाडेटा डेटा rshijack को भेजें:
fakeData.sh <ETAG> | rshijack -q eth0 169.254.169.254:80 <LOCAL_IP>:<PORT> <TARGET_SEQ> <TARGET_ACK>; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost
यह कदम सार्वजनिक कुंजी को अधिकृत करता है, संबंधित निजी कुंजी के साथ SSH कनेक्शन सक्षम करता है।
संदर्भ
- https://www.ezequiel.tech/2020/08/dropping-shell-in.html
- https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities
{{#include ../../../banners/hacktricks-training.md}}