GCP - Network Docker Escape

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Başlangıç Durumu

Bu teknik belirtildiği iki yazıda da saldırganlar, GCP tarafından yönetilen bir Docker konteynerinde kök erişimi elde etmeyi başardılar ve ana ağa erişime sahiptiler (CAP_NET_ADMIN ve CAP_NET_RAW yetenekleri ile).

Saldırı Açıklaması

Google Compute Engine örneğinde, ağ trafiğinin düzenli olarak incelenmesi, 169.254.169.254 adresindeki metadata örneğine birçok düz HTTP isteği olduğunu ortaya çıkardı. Sık sık bu tür isteklerde bulunan açık kaynaklı bir hizmet olan Google Guest Agent, bu istekleri yapar.

Bu ajan, metadata'da yapılan değişiklikleri izlemek için tasarlanmıştır. Özellikle, metadata, bir SSH genel anahtarları alanı içerir. Yeni bir genel SSH anahtarı metadata'ya eklenirse, ajan otomatik olarak bunu .authorized_key dosyasında yetkilendirir. Gerekirse ayrıca yeni bir kullanıcı oluşturur ve onları sudoers a ekler.

Ajan, tüm metadata değerlerini rekürsif olarak almak için bir istek göndererek (GET /computeMetadata/v1/?recursive=true) değişiklik olup olmadığını kontrol eder. Bu istek, metadata sunucusunun, son alımdan bu yana metadata'da herhangi bir değişiklik olup olmadığını belirleyen bir Etag ile yanıt göndermesini sağlamak için tasarlanmıştır (wait_for_change=true&last_etag=). Ek olarak, bir zaman aşımı parametresi (timeout_sec=) eklenir. Belirtilen zaman aşımı süresi içinde herhangi bir değişiklik olmazsa, sunucu değişmeyen değerlerle yanıt verir.

Bu süreç, IMDS (Örnek Metadata Hizmeti)'nin, yapılandırma değişikliği olmadığında 60 saniye sonra yanıt vermesine olanak tanır ve bu da sahte bir yapılandırma yanıtının enjekte edilmesi için bir pencere oluşturur.

Bir saldırgan, IMDS sunucusundan gelen yanıtı Man-in-the-Middle (MitM) saldırısı yaparak ve IMDS sunucusundan gelen yanıtı taklit ederek ve yeni bir genel anahtar ekleyerek bunu sömürebilir. Bu, ana bilgisayara yetkisiz SSH erişimi sağlayabilir.

Kaçış Tekniği

ARP spoofing, Google Compute Engine ağlarında etkisizdir, ancak Ezequiel tarafından geliştirilen rshijack'ın modifiye edilmiş bir sürümü, paket enjeksiyonu için kullanılabilir.

Bu rshijack sürümü, ACK ve SEQ numaralarını komut satırı argümanları olarak girmeyi sağlar, böylece gerçek Metadata sunucusu yanıtından önce bir yanıtın taklit edilmesi kolaylaşır. Ayrıca, özel olarak oluşturulmuş bir yükü döndüren küçük bir Shell betiği kullanılır. Bu yük, Google Guest Agent'ın .authorized_keys dosyasında belirtilen bir genel anahtarla wouter adında bir kullanıcı oluşturmasını tetikler.

Betik, Metadata sunucusunun hemen farklı metadata değerlerini Google Guest Agent'a bildirmesini engellemek için aynı ETag'i kullanır ve böylece yanıtı geciktirir.

Sahte yanıtın yürütülmesi için aşağıdaki adımlar gereklidir:

  1. Metadata sunucusuna yapılan istekleri tcpdump kullanarak izleyin:

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

To escape the Docker container and gain access to the underlying host, you can exploit misconfigurations in the GCP network settings.

Turkish Translation:

Docker konteynerinden kaçarak altta yatan ana bilgisayara erişim sağlamak için, GCP ağ ayarlarında yapılandırma hatalarını sömürebilirsiniz.

<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. Rshijack'e doğru ETAG ile sahte meta verileri gönderin:

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

Bu adım, ilgili özel anahtarla SSH bağlantısını etkinleştirmek için genel anahtarı yetkilendirir.

Referanslar

AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated