release_agent exploit - Relative Paths to PIDs
Daha fazla ayrıntı için https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html adresindeki blog yazısını kontrol edin. İşte sadece bir özet:
Teknik, bir konteyner içinden ana bilgisayarda kod çalıştırmak için bir yöntem açıklar. Bu yöntem, konteynerin dosya sistemi yolunu bulmayı zorlaştıran depolama sürücüsü yapılandırmalarını (Kata Containers veya belirli devicemapper
ayarları gibi) aşar.
Ana adımlar:
İşlem Kimliklerini (PID'leri) Bulma: Linux sahte dosya sistemindeki
/proc/<pid>/root
sembolik bağlantısını kullanarak, konteyner içindeki herhangi bir dosya ana bilgisayarın dosya sistemiyle ilişkilendirilebilir. Bu, konteynerin ana bilgisayardaki dosya sistemi yolunu bilmek gereksinimini ortadan kaldırır.PID Saldırısı: Ana bilgisayardaki PID'leri aramak için kaba kuvvet yöntemi kullanılır. Bu, sırasıyla
/proc/<pid>/root/<dosya>
konumunda belirli bir dosyanın varlığını kontrol ederek yapılır. Dosya bulunduğunda, ilgili PID'nin hedef konteyner içinde çalışan bir işleme ait olduğunu gösterir.Çalıştırmayı Tetikleme: Tahmin edilen PID yolunu
cgroups release_agent
dosyasına yazmak. Bu eylem,release_agent
'ın çalıştırılmasını tetikler. Bu adımın başarılı olduğu, bir çıktı dosyasının oluşturulup oluşturulmadığı kontrol edilerek doğrulanır.
Saldırı Süreci
Saldırı süreci, konteyner içinde çalışan bir işlemin doğru PID'sini tahmin ederek ana bilgisayarda bir yük çalıştırmayı amaçlayan daha ayrıntılı bir dizi eylemi içerir. İşte nasıl gerçekleşir:
Ortamı Başlatma: Ana bilgisayarda bir yük betiği (
payload.sh
) hazırlanır ve cgroup manipülasyonu için benzersiz bir dizin oluşturulur.Yükü Hazırlama: Ana bilgisayarda çalıştırılacak komutları içeren yük betiği yazılır ve çalıştırılabilir hale getirilir.
Cgroup Ayarları: Cgroup bağlanır ve yapılandırılır.
notify_on_release
bayrağı, cgroup serbest bırakıldığında yükün çalıştırılmasını sağlamak için ayarlanır.PID Kaba Kuvveti: Bir döngü, potansiyel PID'ler arasında dolaşarak her tahmin edilen PID'yi
release_agent
dosyasına yazar. Bu, etkili bir şekilde yük betiğinirelease_agent
olarak ayarlar.Tetikleme ve Çalışmanın Kontrolü: Her PID için, yük betiğinin çıktısı bulunana kadar cgroup'ın
cgroup.procs
'una yazılır. Bu, PID'nin doğru olduğundarelease_agent
'ın çalıştırılmasını tetikler. Döngü, yük betiğinin çıktısı bulunana kadar devam eder, bu da başarılı bir şekilde çalıştırıldığını gösterir.
Blog yazısından PoC:
Last updated