GCP - Network Docker Escape
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αρχική κατάσταση
Στις δύο περιγραφές όπου αυτή η τεχνική αναφέρεται, οι επιτιθέμενοι κατάφεραν να αποκτήσουν root πρόσβαση μέσα σε ένα Docker container που διαχειρίζεται το GCP με πρόσβαση στο δίκτυο του host (και τις δυνατότητες CAP_NET_ADMIN και CAP_NET_RAW).
Επεξήγηση επίθεσης
Σε ένα Google Compute Engine instance, η τακτική επιθεώρηση της κυκλοφορίας δικτύου αποκαλύπτει πολυάριθμα plain HTTP requests προς το metadata instance στη διεύθυνση 169.254.169.254. Ο Google Guest Agent, μια open-source υπηρεσία, κάνει συχνά τέτοια αιτήματα.
Αυτός ο agent έχει σχεδιαστεί για να παρακολουθεί αλλαγές στα metadata. Σημειωτέον, τα metadata περιλαμβάνουν ένα πεδίο για SSH public keys. Όταν ένα νέο public SSH key προστίθεται στα metadata, ο agent το εξουσιοδοτεί αυτόματα στο αρχείο .authorized_key. Μπορεί επίσης να δημιουργήσει νέο χρήστη και να τον προσθέσει στους sudoers αν χρειαστεί.
Ο agent παρακολουθεί αλλαγές στέλνοντας ένα αίτημα για ανάκτηση όλων των τιμών του metadata αναδρομικά (GET /computeMetadata/v1/?recursive=true). Αυτό το αίτημα έχει σχεδιαστεί ώστε ο metadata server να στείλει απάντηση μόνο αν υπάρχει κάποια αλλαγή στα metadata από την τελευταία ανάκτηση, η οποία ταυτοποιείται με ένα Etag (wait_for_change=true&last_etag=). Επιπλέον, συμπεριλαμβάνεται μια παράμετρος timeout (timeout_sec=). Εάν δεν συμβεί αλλαγή εντός του καθορισμένου timeout, ο server απαντά με τις αμετάβλητες τιμές.
Αυτή η διαδικασία επιτρέπει στο IMDS (Instance Metadata Service) να απαντήσει μετά από 60 seconds αν δεν έχει γίνει κάποια αλλαγή στη διαμόρφωση, δημιουργώντας έτσι ένα πιθανό παράθυρο για την εισαγωγή ψευδούς απάντησης διαμόρφωσης στον guest agent.
Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό κάνοντας μια Man-in-the-Middle (MitM) attack, μιμούμενος την απάντηση από τον IMDS server και εισάγοντας ένα νέο public key. Αυτό θα μπορούσε να επιτρέψει μη εξουσιοδοτημένη SSH πρόσβαση στο host.
Τεχνική αποφυγής
Ενώ το ARP spoofing είναι αναποτελεσματικό στα δίκτυα του Google Compute Engine, μια τροποποιημένη έκδοση του rshijack που αναπτύχθηκε από τον Ezequiel μπορεί να χρησιμοποιηθεί για packet injection στην επικοινωνία προκειμένου να εισαχθεί ο SSH χρήστης.
Αυτή η έκδοση του rshijack επιτρέπει την εισαγωγή των ACK και SEQ αριθμών ως παραμέτρους γραμμής εντολών, διευκολύνοντας την ψευδοποίηση μιας απάντησης πριν από την πραγματική απάντηση του Metadata server. Επιπλέον, ένα μικρό Shell script χρησιμοποιείται για να επιστρέψει ένα ειδικά κατασκευασμένο payload. Αυτό το payload ενεργοποιεί τον Google Guest Agent να δημιουργήσει τον χρήστη wouter με ένα συγκεκριμένο public key στο αρχείο .authorized_keys.
Το script χρησιμοποιεί το ίδιο ETag για να εμποδίσει τον Metadata server να ειδοποιήσει αμέσως τον Google Guest Agent για διαφορετικές τιμές metadata, καθυστερώντας έτσι την απάντηση.
Για να εκτελεστεί η ψευδοποίηση, τα εξής βήματα είναι απαραίτητα:
- Παρακολούθηση αιτημάτων προς τον Metadata server χρησιμοποιώντας tcpdump:
Παρακολούθηση αιτημάτων προς τον Metadata server με tcpdump
```bash tcpdump -S -i eth0 'host 169.254.169.254 and port 80' & ```Αναζητήστε μια γραμμή παρόμοια με:
HackTricks Cloud

