GCP - Network Docker Escape

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

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:

  1. Pratite zahteve ka Metadata serveru koristeći tcpdump:

tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &

Potražite liniju sličnu:

<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
  1. Pošaljite lažne metapodatke sa ispravnim ETAG-om rshijack-u:

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

Ova korak autorizuje javni ključ, omogućavajući SSH konekciju sa odgovarajućim privatnim ključem.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated