Podman Rootless Konteynerleri ve Copy Fail Exploit'i
(garrido.io)- CVE-2026-31431 Copy Fail, yerel ayrıcalıksız kullanıcıların
rootkabuğu elde etmesine olanak tanır ve Podman rootless konteynerlerinin içinde de konteyner içirootyetki yükseltmesi mümkündür - Podman rootless konteynerleri, konteyner içindeki
rootkullanıcısını host üzerindeki ayrıcalıksız kullanıcıya eşleyip host yetkilerini sınırlandırmak için kullanıcı ad alanları, UID ayrımı ve Linux capabilities kombinasyonunu kullanır - Testlerde, rootless non-root konteynerindeki
fookullanıcısı Copy Fail çalıştırdıktan sonra konteyner içinderootolabildi; ancak yetkileri hosttaki ayrıcalıksız kullanıcıbarın sahip olabileceği kapsamla sınırlı kaldı ve hosttarootsahibi dosyaları okuyamadı --security-opt=no-new-privilegesveya--cap-drop=alluygulanırsa, Copy Fail çalıştırıldıktan sonra da kabukfoove capabilitiesnonedurumunda kalır; bu da anındarootkabuğu elde edilmesini ve capability yükseltmesini engelleyebilir- Copy Fail'in etkisi konteyner yaşam döngüsünün ötesine taşabileceğinden çekirdek yaması ve yeniden başlatma gerekir; ayrıca salt okunur root dosya sistemi, cgroups kaynak sınırları, ince runtime imajları ve güvenlik duvarı gibi katmanlı savunma önlemleri birlikte uygulanmalıdır
Copy Fail ve Podman rootless konteynerlerinin maruziyet kapsamı
- CVE-2026-31431, 29 Nisan'da copy.fail üzerinde açıklandı ve yayımlanan Python betiği çalıştırıldığında yerel ayrıcalıksız kullanıcılar
rootkabuğu elde edebiliyor - Copy Fail, Linux konteynerleri içinde de istismar edilebilir ve Podman rootless konteynerlerinde de konteyner içi
rootkabuğu elde etmek mümkündür - Testlerde, konteyner
rootyetkilerinin host düzeyinde konteyneri çalıştıran ayrıcalıksız kullanıcıbarın yetki kapsamıyla sınırlı kaldığı görüldü - Podman'ın rootless uygulaması, konteyner süreçlerinin host yetkilerini sınırlamak için kullanıcı ad alanları, UID ayrımı ve Linux capabilities kombinasyonunu kullanır
- Copy Fail, rootless konteynerlerin de zafiyete karşı bağışık olmadığını; ancak Podman yapılandırmasıyla ihlal sonrası saldırı kapsamının azaltılabileceğini gösteriyor
Rootless konteynerler nasıl çalışır
-
Temel örnek: ayrıcalıksız kullanıcı
barbir HTTP sunucusu çalıştırıyor- Örnek ortamda UID
1001olan ayrıcalıksız kullanıcıbar, Podman ileubuntu:latesttabanlı bir imaj oluşturur vepython3 -m http.serverçalıştırır - Hostta
psçıktısına bakıldığındapython3sürecininbarkullanıcısına ait olarak çalıştığı görülür - Podman fork/exec modelini kullandığı için konteyner süreci
podman runsürecinin alt süreci olur; bu da normal UID ayrımıyla konteyner sürecinin hostrootundan veya diğer kullanıcılardan ayrılmasını sağlar - Yaygın Docker yapılandırmalarında ise ayrıcalıksız kullanıcı
docker runçalıştırsa bile Docker istemcisi root yetkili daemon ile iletişim kurar ve daemon nihayetinde konteyner sürecini oluşturur; bu yüzden hostta konteyner sürecirootolarak görünebilir
- Örnek ortamda UID
-
Rootless rootful
- Konteyner imajlarında açık bir
USERyönergesi veya--userbayrağı yoksa, konteyner komutu genellikle konteyner içinderootolarak çalışır podman topçıktısında HTTP sunucusu süreci host kullanıcısı1001e eşlenmiş görünür; ancak konteyner içi kullanıcı olarakrootşeklinde çalışır- Bu yapılandırma, host üzerinde ayrıcalıksız kullanıcı olarak çalışırken konteyner içinde
rootolan bir rootless rootful durumudur
- Konteyner imajlarında açık bir
-
Kullanıcı ad alanları
- Podman rootless konteynerleri, konteynerin içi ve dışındaki UID/GID değerlerini farklı eşlemek için kullanıcı ad alanları kullanır
- Örnekte, konteyner içindeki UID
0olanroot, hosttaki UID1001olanbarkullanıcısına eşlenir /etc/subuidiçindekibar:165536:65536ayarı,barın ad alanı süreçlerine atanabilecek UID aralığını belirler- Örnekte,
barın UID1001i dışında165536ile231072arasındaki UID'ler debarsüreçlerine atanabilir - Konteyner içindeki
www-datakullanıcısıylasleepçalıştırıldığında, içeridewww-dataolarak görünürken hostta165568olarak görünür podman unshareile kullanıcı ad alanına girildiğinde, hosttabar:barsahibi olan home dizini ad alanı içinderoot:rootolarak görünür- Docker da kullanıcı ad alanlarını destekler; ancak ayrı yapılandırma gerekir ve yalnızca tek bir kullanıcı ad alanına izin verir. Buna karşılık Podman, her UNIX kullanıcısının rootless konteynerlerini o kullanıcının ad alanında çalıştırır
-
Ayrıcalıklı işlemler ve Linux capabilities
- Podman, konteyner süreçlerine ayrıntılı root yetkileri vermek için Linux capabilities kullanır
- İmaj oluşturma sırasında
apt installgibi işlemler,chown,dac_override,fowner,setgid,setuid,net_bind_service,sys_chrootgibi capability kombinasyonları sayesinde mümkün olur podman build --cap-drop=allile tüm capability'ler kaldırılırsa,apt;setgroups,setegid,seteuid,chowngibi işlemlerde başarısız olur ve imaj oluşturma süreci başarısız olur- Yalnızca gerekli capability'leri ekleme yaklaşımı da mümkündür; örnekte
CAP_SETUID,CAP_SETGID,CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNEReklenerek paket kurulumu yapılır - Varsayılan çalıştırma durumundaki HTTP sunucusu, konteyner içinde
rootolarak çalışır veCHOWN,DAC_OVERRIDE,FOWNER,FSETID,KILL,NET_BIND_SERVICE,SETFCAP,SETGID,SETPCAP,SETUID,SYS_CHROOTgibi çok sayıda effective capability'ye sahiptir - HTTP sunucusunun bu yetkilere ihtiyacı olmadığından,
podman run --cap-drop=allile tüm capability'ler kaldırılabilir; bu durumdapodman topçıktısında effective capabilitiesnoneolarak görünür
-
Rootless non-root
- HTTP sunucusunu konteyner içinde de ayrıcalıksız bir kullanıcı olarak çalıştırmak için mevcut
/etc/passwdkullanıcılarından biri, örneğinwww-data, kullanılabilir ya da imaj oluşturma sırasında özel bir kullanıcı oluşturulabilir - Örnekte UID
1002olanfookullanıcısı ve grubu oluşturulur,/var/www/htmliçin okuma izni verilir ve ardındanUSER foo:fooayarlanır - Bu imaj
--cap-drop=allile çalıştırıldığında süreç, konteyner içindefoo, hostta UID166537ve effective capabilitiesnonedurumunda olur - Konteyner süreçleri gereken en düşük yetkiyle çalıştırılmalıdır; örneğin
fooayrıcalıklı port80e bağlanmak zorundaysa--cap-add=CAP_NET_BIND_SERVICEeklenmelidir - Konteyner çalıştırma biçimleri dört kategoriye ayrılır
- host kullanıcısı
root+ konteynerroot: root rootful - host kullanıcısı
root+ konteyner ayrıcalıksız kullanıcı: root non-root - ayrıcalıksız host kullanıcısı + konteyner
root: rootless rootful - ayrıcalıksız host kullanıcısı + konteyner ayrıcalıksız kullanıcı: rootless non-root
- host kullanıcısı
- Podman, rootless rootful konteyner çalıştırmayı kolaylaştırır; ayrıca konteyner süreci ayrıcalıksız kullanıcı olarak çalıştırılabiliyorsa rootless non-root yapılandırması da nispeten kolay kurulabilir
- HTTP sunucusunu konteyner içinde de ayrıcalıksız bir kullanıcı olarak çalıştırmak için mevcut
Bind mount ve UID izolasyonu
- Host dizini konteynere mount edildiğinde, host
root, hostbarve namespacefootarafından sahip olunan dosyalara erişilip erişilemeyeceği UID eşlemesine göre değişir - Örnekte
/var/lib/bar/testdizininde hostrootsahipliroot.txtve hostbarsahiplibar.txtoluşturuluyor; ardından bunlar konteyner içinde/testolarak okuma/yazma izniyle mount ediliyor - Konteyner
fooolarak çalıştırıldığında, hostbarsahipli dosya konteyner içinderoot:rootolarak görünürken, hostrootsahipli dosya namespace'e eşlenmediği içinnobody:nogroupolarak görünür - Konteyner içindeki
foo,bar.txtveroot.txtdosyalarını okuyamaz; rootless non-root, rootless rootful'a kıyasla ek izolasyon sağlar footarafından mount edilmiş dizinde oluşturulanfoo.txt, hostta UID166537sahipli görünür ve host kullanıcısıbarbu dosyanın içeriğini okuyamaz- Konteyner iç
rootile çalıştırıldığında, namespaceroothostbarsahipli dosyaları vefoosahipli dosyaları okuyabilir, ancak hostrootsahipli dosyaları okuyamaz - İç
rootile çalıştırırken--cap-drop=alluygulanırsafoodosyası da okunamaz ve yalnızca hostbarsahipli dosyalar okunabilir
Copy Fail testi
-
Test koşulları
- Copy Fail testinde, başlangıçta yayımlanan commit
8e918b5içindeki exploit sürümü kullanıldı - Örnek konteyner imajı, konteyner içinden exploit betiğinin indirilebilmesi için mevcut HTTP sunucusu imajına
curleklenerek hazırlandı - İmaj adı
copyfailolarak build edildi - Test çekirdeği Debian'ın
6.12.74+deb13+1-amd64sürümü; Debian ölçütüne göre son sürümler içinde6.12.85altı sürümlerin hâlâ yamalanmamış çekirdek olarak kullanılabildiği kabul ediliyor - Normalde ayrıcalıksız kullanıcı
foo,suçağırdığındarootparolası istenir - Her testte konteyner kullanıcısı Copy Fail betiğini
/tmpaltına indirip çalıştırdıktan sonrarootshell elde edersesleepçağırır - Copy Fail, konteyner yaşam döngüsünü aştığı için her testten önce VM yeniden başlatılır
- Copy Fail testinde, başlangıçta yayımlanan commit
-
Rootless rootful'daki sonuçlar
- Konteyner
--user=rootile çalıştırıldığında, konteyner içindeki süreç zatenrootolur - Bu durumda Copy Fail betiği çalıştırılıp
suçağrıldığındauid=0(root)shell elde edilir; ancakrootkullanıcısı zaten parola olmadansuile başka bir root shell açabildiği için Copy Fail'in pratikte eklediği bir şey yoktur podman topçıktısında/bin/bash,python3 copy_fail_exp.py,suvesleepsüreçlerinin tümü konteyner içinderoot, host kullanıcısında ise1001olarak görünür- Aynı capability kümesi korunur ve
CHOWN,DAC_OVERRIDE,FOWNER,FSETID,KILL,NET_BIND_SERVICE,SETFCAP,SETGID,SETPCAP,SETUID,SYS_CHROOTgörünür - İç
root, mount edilen/testiçindebar.txtvefoo.txtdosyalarını okuyabilir; ancak hostrootsahipliroot.txtdosyasını okuyamaz
- Konteyner
-
Rootless non-root'taki sonuçlar
- Konteyner
fooolarak çalıştırıldıktan sonra Copy Fail betiği çalıştırılıpsuçağrıldığında yetkiler konteyner içirootseviyesine yükselir - Elde edilen shell'in
idçıktısıuid=0(root) gid=1002(foo) groups=1002(foo)olarak görünür podman topçıktısında başlangıçtaki/bin/bash, exploit çalıştırma süreci vesuçağrısı host UID166537, konteyner kullanıcısıfoo, capabilitiesnoneolarak görünür- Yetki yükseltme sonrası
[sh]vesleep, host kullanıcısı1001, konteyner kullanıcısırootolarak görünür ve rootless rootful ile aynı capability kümesini elde eder - Yetkisi yükseltilmiş konteyner
rootkullanıcısı da hostrootsahipliroot.txtdosyasını okuyamaz - Bu durumda konteyner ele geçirilmiş olsa da saldırı kapsamı, konteynerin ve host üzerindeki ayrıcalıksız kullanıcı
barın erişebildiği alanla sınırlı kalır
- Konteyner
-
no-new-privilegesuygulandığındaki sonuçlar- Podman,
--security-opt=no-new-privilegesile konteyner süreçlerinin başlangıç anındakinden daha fazla yetki kazanmasını engelleyebilir - Bu seçenek rootless non-root konteynere uygulandığında ve Copy Fail çalıştırıldığında bir shell açılır ama durum hâlâ
uid=1002(foo)olarak kalır podman topçıktısında da tüm süreçler host UID166537, konteyner kullanıcısıfoo, capabilitiesnoneolarak kalır- Mount edilen
/testiçinde defooyalnızca kendi dosyasını okuyabilir;bar.txtveroot.txtdosyalarını okuyamaz - Konteyner ele geçirilmiş olsa da durum, içerideki ayrıcalıksız kullanıcı
foove capability'siz bir durumla sınırlı kalır
- Podman,
-
--cap-drop=alluygulandığındaki sonuçlar- Rootless non-root konteyner
--cap-drop=allile çalıştırılsa dafoozaten başlangıçta capability sahibi değildir - Bu durumda Copy Fail çalıştırılıp
suçağrıldığında açılan shelluid=1002(foo)olarak kalır podman topçıktısında/bin/bash, exploit çalıştırma,su, shell vesleepsüreçlerinin tümüfoove capabilitiesnonedurumunda görünür- Exploit,
rootshell elde etmeyi başaramaz vefoo,/testiçinde yalnızca kendi dosyasını okuyabilir - Bu sonuç
no-new-privilegestestiyle benzerdir; iki önlem birlikte kullanıldığında capability maruziyeti etkili biçimde azaltılabilir
- Rootless non-root konteyner
-
Exploit'in kalıcılığı
- Anlık
rootshell ve capability kazanımıno-new-privilegesveya--cap-drop=allile engellenebilse de exploit'in kendisinin etkisi sürer - Sonrasında capability kısıtlaması olmadan yeni bir konteyner çalıştırılırsa ayrıcalıksız konteyner kullanıcısı
foo, yalnızcasuçağırarak bile konteynerrootolabilir - Bu nedenle çekirdek yaması ve yeniden başlatma hâlâ gereklidir
- Anlık
Derinlemesine savunma stratejileri
-
Salt okunur imajlar
podman runkomutuna--read-onlyeklendiğinde konteyner kök dosya sistemi salt okunur olarak mount edilir- Podman varsayılan olarak
/tmp,/run,/var/tmpgibi bazı dizinleri yazılabilir olarak mount ettiğinden, tamamen salt okunur hale getirmek için--read-only-tmpfs=falseda eklenmelidir - Salt okunur bir konteyner ele geçirilirse sisteme yazma işlemlerine izin verilmez; bu da exploit sonrası bazı saldırıları sınırlayabilir
- Ancak
curlçıktısıpython3'e pipe edilebildiği için yalnızca salt okunur ayar, exploit'in çalıştırılmasını tek başına engellemez - Örnekteki
python3HTTP sunucusu dosya sistemine yazma gerektirmediğinden bu seçenek güvenle kullanılabilir - Önceden derlenmiş birçok imaj, belirli dizinlere yazma erişimini varsaydığı için salt okunur kök dosya sisteminde düzgün çalışmayabilir
- Salt okunur kök dosya sistemi, konteynere bağlı yazılabilir volume'lerden bağımsızdır; ele geçirilme durumunda bu mount dizinlerine yine de yazılabilir
-
Kaynak sınırları
- Docker ve Podman, konteynere sağlanan kaynakları sınırlamak için cgroups kullanabilir
- Konteynerlerin sınırsız bellek, CPU ve PID'e ihtiyacı yoktur
podman statsile konteyner kaynak kullanımını kontrol ettikten sonra buna uygun sınırlar uygulanabilir
-
Kullanılabilir binary'leri sınırlama
- Örnek, basitlik adına
ubuntuimajını kullansa daubuntuimajı ele geçirilme durumunda saldırganın kullanabileceği çok sayıda binary içerir - HTTP sunucusunu çalıştırmak için bu binary'lerin çoğuna gerek yoktur
- Runtime imajı mümkün olduğunca ince tutulmalıdır
- Multi-stage build kullanılarak build-time ortamı ile runtime ortamı ayrılabilir
- python3 gibi amaca özel imajlar, Debian'ın
-slimvaryantları veyaalpinegibi daha küçük dağıtımlar temel alınabilir - Konteyner süreciyle uyumluysa distroless images ya da
scratchkullanılarak shell, paket yöneticisi ve sistem yardımcı programları olmayan bir runtime oluşturulabilir
- Örnek, basitlik adına
-
Güvenlik duvarı
iptablesveyanftableskullanılarak konteyner süreçleri güvenlik duvarıyla sınırlandırılabilir- Konteyner sürecine yalnızca kesinlikle gerekli gelen ve giden bağlantılara izin verilmelidir
- HTTP sunucusu örneğinde DNS'ye ya da yerel/uzak sunuculara bağlantı gerekmediğinden, yalnızca kurulmuş gelen bağlantılardan gelen
tcppaketlerine izin verecek şekilde sınırlandırılabilir
Operasyonel anlamı
- Standart Podman rootless konteynerleri, varsayılan olarak standart Docker konteyner yapılandırmasına kıyasla daha iyi izolasyon sağlar
- Docker da rootless çalışma ve ayrıcalıksız user namespace kullanımı sunar; ancak Podman'a göre daha fazla yapılandırma çabası gerektirir ve mimari farklar da etkili olur
- Docker hâlâ yaygın olarak kullanılmaktadır ve Dokku, Kamal, Coolify, Dokploy gibi self-hosting araçları da varsayılan olarak Docker kullanır
- Docker Hub imajları yeterince incelenmeden çalıştırılırsa veya sıkılaştırma önlemleri uygulanmazsa, hizmetler gerekenden daha geniş bir saldırı yüzeyiyle çalışabilir
- Konteyner imajlarının uygulama ayrıntıları anlaşılmalıdır
- Konteyner sürecini hangi kullanıcı veya kullanıcıların çalıştırdığını bilmek gerekir
- Konteyner sürecinin kök dosya sisteminde hangi dizinlere bağımlı olduğunu bilmek gerekir
- Gerekli Linux capabilities ile gereksiz capabilities ayırt edilmelidir
- Podman ve konteynerlerin sunduğu çeşitli mekanizmalar birlikte kullanılarak konteynerler güçlendirilebilir ve ele geçirilme durumunda etki alanı azaltılabilir
- İş yüküne bağlı olarak konteynerlere tek güvenlik sınırı olarak güvenilmemelidir
- Konteynerlerle birlikte ayrı fiziksel veya sanal makineler kullanmak etkili bir ayrım sağlayabilir
- Podman, aynı host üzerinde bile her iş yükünü ayrı bir ayrıcalıksız kullanıcı ve kendi user namespace'i ile çalıştırarak izole etme yöntemi sunar
1 yorum
Lobste.rs görüşleri
Yayımlanan exploit'ten ziyade, güvenlik açığının mümkün kıldığı ham davranışa odaklanmak gerekir
Bu açık, salt okunur olup olmadığına bakılmaksızın page cache'e yazmayı mümkün kıldığı için, kötü niyetli bir container overlayfs'in base image dosyalarına ait sayfaları değiştirebilir ve container dağıtım biçimine bağlı olarak etki başka container'lara da sıçrayabilir
Buradaki rootless yapılandırmada hedef, host sistemde aynı kullanıcı olarak çalışan diğer container'lardır
Başka bir exploit yöntemi olarak, hâlihazırda kullanımda olduğu bilinen bir base image tabanlı container'ı çalıştırıp ya da bulup, o container içindeki page cache'i değiştirdikten sonra aynı runtime ve overlayfs verisini paylaşan başka container'ların o kodu çalıştırması sağlanabilir
Rootless ve user namespace önemli, ancak burada pek yardımcı olmuyor; copy.fail sitesinin de söylediği gibi container'larda
socket(AF_ALG, ...)sistem çağrısının seccomp ile engellenmesi değerlendirilmeli“Container dağıtım biçimine bağlı olarak” ifadesiyle tam olarak ne kastedildiğini biraz daha açmanız iyi olurdu
Rootless Podman'ın avantajı, iş yüküne bağlı olarak host'ta aynı kullanıcıyla container çalıştırma zorunluluğu olmamasıdır
Eğer ana workstation kullanıcısı olarak birden fazla rootless container çalıştırma durumundan söz ediyorsanız katılıyorum; ancak sunucularda her birini ayrı kullanıcılarla ayırmak mümkün ve aynı container image'ı farklı yetkisiz kullanıcılarla da çalıştırabilirsiniz
Bu, çoğunu
rootolarak çalıştıran Docker varsayılanından oldukça farklı; ama bunun nihai güvenlik sınırı olmadığına yazının sonunda ben de değindim ve rootless container'ları birden çok yetkisiz kullanıcı arasında paylaştırmanın uygun olup olmadığı kullanım amacına göre değişirBazı iş yüklerini VM ile ayırarak kullanıyorum
Rootless ve user namespace'in burada yardımcı olmadığı sözüyle exploit'i engellemenin mi kastedildiğini merak ediyorum
Seccomp için henüz container'lara açık bir politika yazmış değilim, bu yüzden ele almadım; ama daha fazla incelemek için iyi bir vesile
Podman ve rootless container'ları seviyorum, ama CopyFail'i görünce kardeş yorumdakiyle aynı sonuca vardım
podman+rootlessek erişim kontrolü avantajları sunsa da sonuçta klasik öğüdü yeniden doğruluyor: container bir güvenlik sınırı değildir; tek bir kernel exploit'i her şeyi delebilirSistem yönetimini hobi düzeyinde yapan biri olarak, bu alandaki yeni yönelimlerden biri olarak libkrun backend for crun with podman'a baktım
Vaat şu: container'laştırılmış iş yüklerinin çoğunu olduğu gibi ele alırken, bunları perde arkasında kendi ayrı guest kernel'ine sahip bir MicroVM içinde çalıştırmak; ancak olgunluk, sahada doğrulanma ve güvenlik denetimi seviyesi hakkında pek bilgim yok, bazı kısımlar oldukça bleeding-edge görünüyor
MicroVM'ler LLM kodlama araçlarında aktif biçimde benimsendiği için bu durum uzun sürmeyebilir
podman machinede umut verici görünmüştü, ama ne yazık ki yalnızca geliştirici workstation kullanımını hedefliyordu ve host sistem başına container çalıştırmak için tek bir VM modeli üzerine kuruluyduYine de “container bir güvenlik sınırı değildir” sözünün fazla basit olduğunu düşünüyorum. Container'lar kesinlikle bir güvenlik sınırıdır; sadece olmasını umduğumuz kadar güçlü değiller
Yerel dağıtımlarda bu çizgi biraz daha bulanıklaşıyor
Donanım açısından VM'ler süreçlerden özünde daha güvenli değil, ama üç nedenle sınır daha savunulabilir oluyor
VM escape, sistem çağrılarına göre daha seyrek olduğundan performansı bozmadan daha fazla yan kanal azaltımı uygulamak için alan bırakıyor
VM'nin host arayüzü çok daha basittir. Blok aygıtları blok düzeyinde okuma-yazma arayüzü sunar, ağ aygıtları ise frame gönderip alır
Linux ya da *BSD'nin socket'ler için sunduğu
setsockoptçağrısı, çoğu emülasyon ya da paravirtualization sürücüsünden çok daha büyük bir saldırı yüzeyidir; üstelik bu bile toplam kernel saldırı yüzeyinin yalnızca çok küçük bir parçasıdırVM arayüzü durum açısından da çok daha sınırlıdır. İstek-yanıt modelindeki ring içinde devam eden transaction'lar vardır, ama onun dışında neredeyse hiçbir şey yoktur
Kimlik bilgileri, UID, GID, file descriptor tabloları gibi şeyler kernel'e duruma dayalı karmaşıklık ekler ve hata varsa süreç bunu suistimal edebilir
Workstation varyantlarının zorluğu, bu karmaşıklığın yeniden içeri alınmasıdır
Örneğin container base layer'ı değişmez bir dosya sistemini taşıyan bir blok aygıtı olarak sunulabilir, ama volume'lar ve paylaşılan klasörler muhtemelen 9pfs ya da VirtIO-FS, yani VirtIO üzerinde 9p veya FUSE olarak mount edilecektir
Bu da saldırı yüzeyini yeniden büyütür
Şanslıysanız bir exploit chain gerekir
FreeBSD tarafına daha aşinayım; orada genelde paravirtualization ve emülasyon aygıtları sağlayan bileşenler Capsicum ile sandbox'a alınır, bu yüzden önce bir host sürecinin ele geçirilmesi, ardından da VM'nin erişim yetkisi olmayan şeylere erişmek için kernel'in aşılması gerekir
Ama bu ek sandboxing yapılmazsa container escape, kullanıcının yapabildiği her şeyi yapabilen bir dünyaya geri döner ve masaüstünde root'un ele geçirilmesinden çok da iyi sayılmaz
Kişisel olarak gVisor'ı daha çok tercih ediyorum. VMM runtime değil, ama yıllardır var ve Tencent gibi şirketlerde de kullanılıyor; tüm container'ları zaten bir Proxmox VM içinde çalıştırdığım ortamıma da iyi uyuyor
Test ettiğim bir diğer şey de syd-oci; sanki varsayılan öneri olan MicroVM ya da gVisor'a kıyasla biraz daha az ilgi görmüş gibi
libkrun referansı için de teşekkürler, umut verici bir olasılık gibi görünüyor
Bunun güvenlik denetimlerine de yol açma ihtimali yüksek görünüyor