GCP - Network Docker Escape
Hali ya Awali
Katika maandishi yote ambapo mbinu hii imeelezwa, 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 Shambulio
Kwenye kifaa cha Google Compute Engine, ukaguzi wa kawaida wa trafiki ya mtandao unaonyesha maombi mengi ya HTTP ya wazi kwa kifaa cha metadata kwa 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 katika metadata. Kwa umuhimu, metadata inajumuisha eneo la funguo za umma za SSH. Wakati funguo mpya ya umma ya SSH inaongezwa kwenye metadata, huduma hii huweka moja kwa moja idhini kwenye faili ya .authorized_key
. Inaweza pia kuunda mtumiaji mpya na kuwaongeza kwenye sudoers ikiwa inahitajika.
Huduma hii inafuatilia mabadiliko kwa kutuma ombi la kupata thamani zote za metadata kwa kina (GET /computeMetadata/v1/?recursive=true
). Ombi hili limeundwa kusababisha seva ya metadata kutuma jibu ikiwa kuna mabadiliko yoyote katika metadata tangu upate mara ya mwisho, inayotambulika na Etag (wait_for_change=true&last_etag=
). Kwa kuongezea, kuna parameter ya muda wa kusubiri (timeout_sec=
) iliyomo. 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 uwezekano wa kuingiza jibu la uongo la usanidi kwa huduma ya mgeni.
Mshambuliaji anaweza kutumia hili kwa kufanya shambulio la Man-in-the-Middle (MitM), kufanya jibu la uongo kutoka kwa seva ya IMDS na kuweka funguo mpya ya umma. Hii inaweza kuwezesha ufikiaji wa SSH usiohalali kwa mwenyeji.
Mbinu ya Kutoroka
Wakati 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 kufanya jibu la uongo kabla ya jibu halisi la seva ya Metadata. Kwa kuongezea, script ndogo ya Shell hutumiwa kurudisha mzigo ulioandaliwa kwa umakini. Mzigo huu unachochea Google Guest Agent ku kuunda mtumiaji wouter
na funguo ya umma iliyospecifikwa kwenye faili ya .authorized_keys
.
Script hutumia ETag ile ile kuzuia Seva ya Metadata kutambulisha mara moja Google Guest Agent ya thamani tofauti za metadata, hivyo kuchelewesha jibu.
Kutekeleza udanganyifu, hatua zifuatazo ni muhimu:
Fuatilia maombi kwa seva ya Metadata kwa kutumia tcpdump:
Tafuta mstari kama huu:
Tuma data bandia ya metadata na ETAG sahihi kwa rshijack:
Hii hatua inaidhinisha funguo ya umma, ikiruhusu uhusiano wa SSH na funguo ya kibinafsi inayolingana.
Marejeo
Last updated