GCP - Network Docker Escape

Support HackTricks

Hali ya Awali

Katika maandishi yote ambapo mbinu hii imetajwa, wadukuzi walifanikiwa kupata ufikiaji wa root ndani ya kontena ya Docker inayosimamiwa na GCP na ufikiaji wa mtandao wa mwenyeji (na uwezo wa CAP_NET_ADMIN na CAP_NET_RAW).

Maelezo ya Shambulizi

Kwenye kifaa cha Google Compute Engine, ukaguzi wa kawaida wa trafiki ya mtandao unaonyesha maombi mengi ya HTTP wazi kwa kifaa cha metadata kwa anwani 169.254.169.254. Google Guest Agent, huduma ya chanzo wazi, mara nyingi hufanya maombi kama hayo.

Huduma hii imeundwa kwa ajili ya kufuatilia mabadiliko kwenye metadata. Kwa umuhimu, metadata inajumuisha eneo la funguo za umma za SSH. Wakati funguo mpya ya umma ya SSH inapowekwa kwenye metadata, huduma hii huidhinisha moja kwa moja kwenye faili ya .authorized_key. Inaweza pia kuunda mtumiaji mpya na kuwaongeza kwenye sudoers ikihitajika.

Huduma hii hufuatilia mabadiliko kwa kutuma ombi la kupata thamani zote za metadata kwa njia ya kurekursi (GET /computeMetadata/v1/?recursive=true). Ombi hili limeundwa kusababisha seva ya metadata kutuma jibu ikiwa kuna mabadiliko yoyote kwenye metadata tangu upate wa mwisho, inayotambulika na Etag (wait_for_change=true&last_etag=). Kwa kuongezea, kuna parameter ya muda wa kusubiri (timeout_sec=) inayojumuishwa. Ikiwa hakuna mabadiliko yanatokea ndani ya muda uliowekwa, seva itajibu na thamani zilizobaki.

Mchakato huu huruhusu IMDS (Huduma ya Metadata ya Kifaa) kujibu baada ya sekunde 60 ikiwa hakuna mabadiliko ya usanidi yaliyotokea, ikiumba fursa ya kuingiza jibu la uongo la usanidi kwa huduma ya mgeni.

Mshambuliaji anaweza kutumia hili kwa kufanya shambulizi la Man-in-the-Middle (MitM), kughushi jibu kutoka kwa seva ya IMDS na kuweka funguo mpya la umma. Hii inaweza kuwezesha ufikiaji wa SSH usiohalali kwa mwenyeji.

Mbinu ya Kutoroka

Ingawa ARP spoofing haifanyi kazi kwenye mitandao ya Google Compute Engine, toleo lililobadilishwa la rshijack lililobuniwa na Ezequiel linaweza kutumika kwa kuingiza pakiti katika mawasiliano ili kuingiza mtumiaji wa SSH.

Toleo hili la rshijack linaruhusu kuingiza nambari za ACK na SEQ kama hoja za mstari wa amri, ikirahisisha kughushi jibu kabla ya jibu halisi la seva ya Metadata. Kwa kuongezea, script ndogo ya Shell hutumiwa kurudisha mzigo ulioandaliwa kwa umakini. Mzigo huu husababisha Google Guest Agent kuunda mtumiaji wouter na funguo ya umma iliyowekwa kwenye faili ya .authorized_keys.

Script hutumia ETag ile ile kuzuia Seva ya Metadata isiwajulishe mara moja Google Guest Agent kuhusu thamani tofauti za metadata, hivyo kuchelewesha jibu.

Kutekeleza kughushi, hatua zifuatazo ni muhimu:

  1. Fuatialia maombi kwa seva ya Metadata kwa kutumia tcpdump:

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

Tafuta mstari kama huu:

<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. Tuma data bandia ya metadata na ETAG sahihi kwa rshijack:

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

Hii hatua inaidhinisha funguo ya umma, ikiruhusu uhusiano wa SSH na funguo ya kibinafsi inayolingana.

Marejeo

Support HackTricks

Last updated