GCP - Network Docker Escape
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Σε και τις δύο αναφορές όπου αυτή η τεχνική αναφέρεται, οι επιτιθέμενοι κατάφεραν να αποκτήσουν root πρόσβαση μέσα σε ένα Docker κοντέινερ που διαχειρίζεται η GCP με πρόσβαση στο δίκτυο του host (και τις δυνατότητες CAP_NET_ADMIN
και CAP_NET_RAW
).
Σε μια instance Google Compute Engine, η κανονική επιθεώρηση της δικτυακής κίνησης αποκαλύπτει πολλές καθαρές HTTP αιτήσεις προς την metadata instance στο 169.254.169.254
. Ο Google Guest Agent, μια υπηρεσία ανοιχτού κώδικα, κάνει συχνά τέτοιες αιτήσεις.
Αυτός ο πράκτορας έχει σχεδιαστεί για να παρακολουθεί τις αλλαγές στη metadata. Σημαντικά, η metadata περιλαμβάνει ένα πεδίο για δημόσια κλειδιά SSH. Όταν προστεθεί ένα νέο δημόσιο κλειδί SSH στη metadata, ο πράκτορας το εξουσιοδοτεί αυτόματα στο αρχείο .authorized_key
. Μπορεί επίσης να δημιουργήσει έναν νέο χρήστη και να τον προσθέσει στους sudoers αν χρειαστεί.
Ο πράκτορας παρακολουθεί τις αλλαγές στέλνοντας ένα αίτημα για ανάκτηση όλων των τιμών metadata αναδρομικά (GET /computeMetadata/v1/?recursive=true
). Αυτό το αίτημα έχει σχεδιαστεί για να προκαλεί τον διακομιστή metadata να στείλει μια απάντηση μόνο αν υπάρχει κάποια αλλαγή στη metadata από την τελευταία ανάκτηση, που προσδιορίζεται από ένα Etag (wait_for_change=true&last_etag=
). Επιπλέον, περιλαμβάνεται μια παράμετρος timeout (timeout_sec=
). Αν δεν υπάρξει καμία αλλαγή εντός του καθορισμένου timeout, ο διακομιστής απαντά με τις αμετάβλητες τιμές.
Αυτή η διαδικασία επιτρέπει στην IMDS (Υπηρεσία Metadata Instance) να απαντήσει μετά από 60 δευτερόλεπτα αν δεν έχει συμβεί καμία αλλαγή στη διαμόρφωση, δημιουργώντας ένα πιθανό παράθυρο για την εισαγωγή μιας ψεύτικης απάντησης διαμόρφωσης στον πράκτορα.
Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό εκτελώντας μια επίθεση Man-in-the-Middle (MitM), προσποιούμενος την απάντηση από τον διακομιστή IMDS και εισάγοντας ένα νέο δημόσιο κλειδί. Αυτό θα μπορούσε να επιτρέψει μη εξουσιοδοτημένη πρόσβαση SSH στον host.
Ενώ η παραπλάνηση ARP είναι αναποτελεσματική στα δίκτυα Google Compute Engine, μια τροποποιημένη έκδοση του rshijack που αναπτύχθηκε από τον Ezequiel μπορεί να χρησιμοποιηθεί για την εισαγωγή πακέτων στην επικοινωνία για να εισαχθεί ο χρήστης SSH.
Αυτή η έκδοση του rshijack επιτρέπει την εισαγωγή των αριθμών ACK και SEQ ως παραμέτρους γραμμής εντολών, διευκολύνοντας την παραπλάνηση μιας απάντησης πριν από την πραγματική απάντηση του διακομιστή Metadata. Επιπλέον, χρησιμοποιείται ένα μικρό Shell script για να επιστρέψει ένα ειδικά κατασκευασμένο payload. Αυτό το payload ενεργοποιεί τον Google Guest Agent να δημιουργήσει έναν χρήστη wouter
με ένα καθορισμένο δημόσιο κλειδί στο αρχείο .authorized_keys
.
Το script χρησιμοποιεί το ίδιο ETag για να αποτρέψει τον διακομιστή Metadata από το να ειδοποιήσει αμέσως τον Google Guest Agent για διαφορετικές τιμές metadata, καθυστερώντας έτσι την απάντηση.
Για να εκτελεστεί η παραπλάνηση, είναι απαραίτητα τα εξής βήματα:
Παρακολούθηση αιτημάτων προς τον διακομιστή Metadata χρησιμοποιώντας tcpdump:
Αναζητήστε μια γραμμή παρόμοια με:
Στείλτε τα ψεύτικα δεδομένα μεταδεδομένων με το σωστό ETAG στο rshijack:
Αυτό το βήμα εξουσιοδοτεί το δημόσιο κλειδί, επιτρέποντας τη σύνδεση SSH με το αντίστοιχο ιδιωτικό κλειδί.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)