GCP - Network Docker Escape
Početno stanje
U oba opisa gde je navedena ova tehnika, napadači su uspeli da dobiju root pristup unutar Docker kontejnera koji je upravljao GCP-om sa pristupom host mreži (i mogućnostima CAP_NET_ADMIN
i CAP_NET_RAW
).
Objašnjenje napada
Na Google Compute Engine instanci, redovna inspekcija mrežnog saobraćaja otkriva brojne obične HTTP zahteve ka metadata instanci na adresi 169.254.169.254
. Google Guest Agent, open-source servis, često šalje takve zahteve.
Ovaj agent je dizajniran da prati promene u metapodacima. Posebno, metapodaci uključuju polje za SSH javne ključeve. Kada se novi javni SSH ključ doda u metapodatke, agent automatski ga autorizuje u fajlu .authorized_key
. Takođe, može kreirati novog korisnika i dodati ga u sudoers ako je potrebno.
Agent prati promene slanjem zahteva za dobijanje svih vrednosti metapodataka rekurzivno (GET /computeMetadata/v1/?recursive=true
). Ovaj zahtev je dizajniran da podstakne metadata server da pošalje odgovor samo ako postoji promena u metapodacima od poslednjeg dobijanja, identifikovana preko Etag-a (wait_for_change=true&last_etag=
). Dodatno, uključen je i parametar timeout (timeout_sec=
). Ako ne dođe do promene u određenom vremenskom roku, server odgovara sa nepromenjenim vrednostima.
Ovaj proces omogućava IMDS-u (Instance Metadata Service) da odgovori nakon 60 sekundi ako nije došlo do promene konfiguracije, stvarajući potencijalni prozor za ubacivanje lažnog odgovora konfiguracije u guest agentu.
Napadač bi mogao iskoristiti ovo izvršavanjem Man-in-the-Middle (MitM) napada, lažirajući odgovor od IMDS servera i ubacivanjem novog javnog ključa. Ovo bi omogućilo neovlašćen pristup hostu putem SSH-a.
Tehnika bekstva
Iako ARP spoofing nije efikasan na Google Compute Engine mrežama, modifikovana verzija rshijack razvijena od strane Ezequiela može se koristiti za ubacivanje paketa u komunikaciju i ubacivanje SSH korisnika.
Ova verzija rshijack-a omogućava unošenje ACK i SEQ brojeva kao argumente komandne linije, olakšavajući lažiranje odgovora pre pravog odgovora servera metapodataka. Dodatno, koristi se mali Shell skript za vraćanje specijalno kreiranog payload-a. Ovaj payload pokreće Google Guest Agent da kreira korisnika wouter
sa određenim javnim ključem u fajlu .authorized_keys
.
Skripta koristi isti ETag kako bi sprečila Metadata server da odmah obavesti Google Guest Agent o različitim vrednostima metapodataka, čime se odlaže odgovor.
Da bi se izvršilo lažiranje, potrebno je izvršiti sledeće korake:
Pratite zahteve ka Metadata serveru koristeći tcpdump:
Potražite liniju sličnu:
Pošaljite lažne metapodatke sa ispravnim ETAG-om rshijack-u:
Ova korak autorizuje javni ključ, omogućavajući SSH konekciju sa odgovarajućim privatnim ključem.
Reference
Last updated