release_agent exploit - Relative Paths to PIDs
Za dalje detalje proverite blog post sa https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Ovo je samo sažetak:
Tehnika opisuje metod za izvršavanje host koda iz kontejnera, prevazilazeći izazove koje postavljaju konfiguracije storage drajvera koje prikrivaju putanju kontejnera na hostu, poput Kata kontejnera ili specifičnih devicemapper
podešavanja.
Ključni koraci:
Lociranje Process ID-eva (PID-ova): Korišćenjem simboličke veze
/proc/<pid>/root
u Linux pseudo-fajl sistemu, bilo koji fajl unutar kontejnera može se pristupiti relativno u odnosu na fajl sistem hosta. Ovo zaobilazi potrebu za poznavanjem putanje fajl sistema kontejnera na hostu.Brute Force PID: Koristi se metoda grubog sile za pretragu PID-ova na hostu. Ovo se postiže sekvenčnim proveravanjem prisustva određenog fajla na putanji
/proc/<pid>/root/<file>
. Kada se fajl pronađe, to ukazuje da odgovarajući PID pripada procesu koji se izvršava unutar ciljnog kontejnera.Pokretanje Izvršavanja: Pretpostavljena putanja PID-a se upisuje u fajl
cgroups release_agent
. Ova akcija pokreće izvršavanjerelease_agent
-a. Uspeh ovog koraka se potvrđuje proverom kreiranja izlaznog fajla.
Proces eksploatacije
Proces eksploatacije uključuje detaljniji set akcija, sa ciljem izvršavanja payload-a na hostu pogađanjem tačnog PID-a procesa koji se izvršava unutar kontejnera. Evo kako se odvija:
Inicijalizacija Okruženja: Skripta payload-a (
payload.sh
) se priprema na hostu, i kreira se jedinstveni direktorijum za manipulaciju cgroup-om.Priprema Payload-a: Payload skripta, koja sadrži komande koje će se izvršiti na hostu, se piše i čini izvršivom.
Podešavanje Cgroup-a: Cgroup se montira i konfiguriše. Zastavica
notify_on_release
se postavlja kako bi se osiguralo da payload izvrši kada se cgroup oslobodi.Brute Force PID: Petlja prolazi kroz potencijalne PID-ove, upisujući svaki pretpostavljeni PID u fajl
release_agent
. Ovo efektivno postavlja payload skriptu kaorelease_agent
.Pokretanje i Provera Izvršavanja: Za svaki PID, upisuje se
cgroup.procs
cgroup-a, pokrećući izvršavanjerelease_agent
-a ako je PID tačan. Petlja se nastavlja dok se ne pronađe izlaz payload skripte, što ukazuje na uspešno izvršavanje.
PoC iz blog posta:
Last updated