Docker release_agent cgroups escape
Vir verdere besonderhede, verwys na die oorspronklike blogpos. Dit is net 'n opsomming:
Oorspronklike PoC:
Die bewys van konsep (PoC) demonstreer 'n metode om cgroups te benut deur 'n release_agent
lêer te skep en sy aanroep te aktiveer om arbitrêre opdragte op die houer gasheer uit te voer. Hier is 'n uiteensetting van die stappe wat betrokke is:
Bereid die Omgewing Voor:
'n Gids
/tmp/cgrp
word geskep om as 'n monteerpunt vir die cgroup te dien.Die RDMA cgroup-beheerder word op hierdie gids gemonteer. In die geval van afwesigheid van die RDMA-beheerder, word dit voorgestel om die
memory
cgroup-beheerder as 'n alternatief te gebruik.
Stel die Kind Cgroup op:
'n Kind cgroup met die naam "x" word binne die gemonteerde cgroup-gids geskep.
Kennisgewings word geaktiveer vir die "x" cgroup deur 1 in sy notify_on_release-lêer te skryf.
Konfigureer die Vrylating Agent:
Die pad van die houer op die gasheer word verkry uit die /etc/mtab-lêer.
Die release_agent-lêer van die cgroup word dan gekonfigureer om 'n skrif met die naam /cmd uit te voer wat op die verkryde gasheerpad geleë is.
Skep en Konfigureer die /cmd Skrip:
Die /cmd skrip word binne die houer geskep en is geconfigureer om ps aux uit te voer, terwyl die uitvoer na 'n lêer met die naam /output in die houer herlei word. Die volle pad van /output op die gasheer word gespesifiseer.
Trigger die Aanval:
'n Proses word binne die "x" kind cgroup geinitieer en word onmiddellik beëindig.
Dit aktiveer die
release_agent
(die /cmd skrip), wat ps aux op die gasheer uitvoer en die uitvoer na /output binne die houer skryf.
Last updated