Container escape gap (CVE-2024-21626) nedir?
Kapalı ortamlardan ayrılmış ideal örnekler olan konteynerler, temelde altta yatan ana makineden izole edilmişlerdir. Bir "escape gap" açığı, bir saldırganın gap içinden ana işletim sistemine yetkisiz erişim sağlayabilmesi durumunda ortaya çıkar ve bazı durumlarda bir kullanıcının hassas verilere (kimlik bilgileri, müşteri bilgileri, vb.) erişimini, sistemde değişiklik yapmasını ve özellikle elde edilen erişimin süper kullanıcı yetkileri ile ek saldırılar başlatmasını sağlayabilir.
Bu ders hakkında
Bu derste, çok belirli bir gap kaçış açığına bakacağız. Kötü niyetli bir Docker dosyası, miras alınmış Docker görüntüsü (ör. FROM kötü niyetli) veya Docker görüntüsü, sırasıyla 'docker build' ile derlendiğinde veya docker run ile çalıştırıldığında, çoğu durumda konteyner ortamından ana ortama kaçabilir ve ana makinede tam root komut yürütme yeteneğine ulaşabilir.
Bu konteyner kaçış açığı ciddi bir sorundur ve konteynerler oluşturan herhangi bir altta yatan ana makine altyapısına zarar verebilir.
Bu sorun, CVE-2024-21626 olarak atanmıştır.
Aşağıdaki içerikle bir güvenlik açıklarına sahip bir docker dosyası kurabilirsiniz. Çalışma dizinini /proc/self/fd/7 olarak belirtir. Bu, /etc/shadow dosyasından içeriği ortaya çıkaracaktır.
Kod:
FROM alpineWORKDIR /proc/self/fd/7RUN cd ../../../../../../ && grep demouser etc/shadow && touch SUCCESSFUL_EXPLOIT
Docker oluşturma aracılığıyla Container. Burada gördüğünüz şey, konteynerden kaçmak ve bir keyfi okuma yoluyla (bu örnekte, ana makinenin /etc/shadow dosyası) ve yazma yoluyla (bu örnekte, DOCKER_BUILD_BREAKOUT dosyasının oluşturulması) ana makine dosya sistemi erişimi sağlamak için docker oluşturmayı kullanmanın istismarıdır.
Şimdi, bir Docker çalıştırma aracılığıyla Container kaçışına bir göz atalım. Burada gördüğünüz şey, aynı güvenlik açığına dayalı kötü niyetli bir Docker görüntüsünün çalıştırılmasının, Docker Container benzer şekilde ana işletim sistemine kaçmasına nasıl neden olabileceğini göstermektedir.
Container Escape Açığı İç Mekanizması
Şimdi, ne olduğuna daha derinlemesine bakalım. Bu açıklık, Docker dosyasında tanımlanan WORKDIR direktifi uygulanırken işlemlerin sırasına bağlı olarak meydana gelir. WORKDIR, Docker dosyası tarafından oluşturulan tüm işlemlerin başlangıç çalışma dizinini tanımlar; örneğin, çalışma zamanında CMD veya ENTRYPOINT direktiflerini kullanarak veya çalışma zamanında RUN direktifini kullanarak yürütülen işlemler.
Belirtilen dizin, özel ayrıcalıklı ana dizin dosya tanımlayıcıları kapatılmadan önce chdir kullanılarak girilir. chdir'e /proc/self/fd/ dizini üzerinden birini bu özel ayrıcalıklı dosya tanımlayıcılarından biri olarak belirtebilirsiniz, bu da dosya tanımlayıcısının kendisi normal işlemler sırasında kapatıldıktan sonra Docker dosyasında belirtilen komutun devralınmasından önce erişilebilir kalmasına neden olur, hem derleme hem de çalışma zamanında.
Belirtilen WORKDIR argümanına dayalı olarak hem bir derleme zamanı RUN komutu hem de bir çalışma zamanı CMD (veya eşdeğeri) için chdir gerçekleştirildiğinde, chdir'in, üst süreç tarafından kapatılan çeşitli özel dizin dosya tanımlayıcıları tarafından önce yolu üzerinden gerçekleşir.
Bir WORKDIR yolu, bu açık dosya tanımlayıcılarını kullanarak ana bir dizine chdir yapabilir ve buradan Docker Engine'in ayrıcalıklarıyla ana dosya sistemi erişimi elde etmek için dışarı çıkılabilir. Buradan, tam ana bilgisayarın tehlikeye atılması için hem derleme zamanı hem de çalışma zamanı ortamından çıkılabilir.
ÇÖZÜM :
Runc sürüm 1.1.12'nin yayınlanması, bu güvenlik açığını ele almak için kritik yamalar içerir. Ayrıca, runc'u kapsayan teknolojilerin ilgili yamalı sürümlerini güncellemek önemlidir. 1 hata için bir runc güncellemesi gereklidir, diğer 3'ü bir buildkit güncellemesi gerektirir.


