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)
W obu opisach, w których ta technika jest określona, napastnicy zdołali uzyskać dostęp root wewnątrz kontenera Docker zarządzanego przez GCP z dostępem do sieci hosta (oraz z uprawnieniami CAP_NET_ADMIN
i CAP_NET_RAW
).
Na instancji Google Compute Engine regularna inspekcja ruchu sieciowego ujawnia liczne zwykłe żądania HTTP do metadanych instancji pod adresem 169.254.169.254
. Google Guest Agent, usługa open-source, często wysyła takie żądania.
Ten agent jest zaprojektowany do monitorowania zmian w metadanych. W szczególności metadane zawierają pole dla kluczy publicznych SSH. Gdy nowy klucz publiczny SSH zostanie dodany do metadanych, agent automatycznie autoryzuje go w pliku .authorized_key
. Może również utworzyć nowego użytkownika i dodać go do sudoers, jeśli zajdzie taka potrzeba.
Agent monitoruje zmiany, wysyłając żądanie do pobrania wszystkich wartości metadanych rekurencyjnie (GET /computeMetadata/v1/?recursive=true
). To żądanie ma na celu skłonienie serwera metadanych do wysłania odpowiedzi tylko wtedy, gdy nastąpiła jakakolwiek zmiana w metadanych od ostatniego pobrania, identyfikowana przez Etag (wait_for_change=true&last_etag=
). Dodatkowo, zawarty jest parametr timeout (timeout_sec=
). Jeśli w określonym czasie nie nastąpi zmiana, serwer odpowiada niezmienionymi wartościami.
Ten proces pozwala IMDS (Instance Metadata Service) odpowiedzieć po 60 sekundach, jeśli nie wystąpiła zmiana konfiguracji, tworząc potencjalne okno do wstrzyknięcia fałszywej odpowiedzi konfiguracyjnej do agenta gościa.
Napastnik mógłby to wykorzystać, przeprowadzając atak Man-in-the-Middle (MitM), fałszując odpowiedź z serwera IMDS i wstawiając nowy klucz publiczny. To mogłoby umożliwić nieautoryzowany dostęp SSH do hosta.
Podczas gdy spoofing ARP jest nieskuteczny w sieciach Google Compute Engine, zmodyfikowana wersja rshijack opracowana przez Ezequiela może być użyta do wstrzykiwania pakietów w komunikacji, aby wstrzyknąć użytkownika SSH.
Ta wersja rshijack pozwala na wprowadzenie numerów ACK i SEQ jako argumentów wiersza poleceń, co ułatwia fałszowanie odpowiedzi przed rzeczywistą odpowiedzią serwera metadanych. Dodatkowo, używany jest mały skrypt Shell, aby zwrócić specjalnie przygotowany ładunek. Ten ładunek wyzwala Google Guest Agent do utworzenia użytkownika wouter
z określonym kluczem publicznym w pliku .authorized_keys
.
Skrypt używa tego samego ETag, aby zapobiec natychmiastowemu powiadomieniu serwera metadanych agenta gościa Google o różnych wartościach metadanych, opóźniając w ten sposób odpowiedź.
Aby wykonać fałszowanie, konieczne są następujące kroki:
Monitoruj żądania do serwera metadanych używając tcpdump:
Szukaj linii podobnej do:
Wyślij fałszywe dane metadanych z poprawnym ETAG do rshijack:
Ten krok autoryzuje klucz publiczny, umożliwiając połączenie SSH z odpowiadającym mu kluczem prywatnym.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)