Fórum Root.cz
Hlavní témata => Server => Téma založeno: 91314 18. 07. 2024, 13:32:38
-
Na hostitelském počítači, jako běžný uživatel, který je ve skupině "docker", si vytvořím kontainter, v tomto kontaineru mám root.
pokud do tohoto kontaineru nasdílím nějaký adresář hostitele,
docker run -v ...
Tak mohu z kontaineru do tohoto adresáře hostitele vytvářet soubory, které se na hostiteli tváří, že je vlastní root.
Navíc mohu takovémuto souboru z kontaineru nastavit s-bit .
Není toto díra ?
-
Toto je cielene spravanie. Ak chcete, aby root z kontajnera nebol root na hostovi, tak treba pouzit user id mapping.
-
A kde tam vlastne vidis jakou diru?
-
A kde tam vlastne vidis jakou diru?
Díra je v tom, že pokud má usere(lowlevel) ve skupině docker nebo LXD/LXC můžeš přes kontejner(který si rozjedes) přistupovat k hostiteli jako root. Takže privilege escalation
-
Toto je zakladni funkcionalita dockeru, ze je rootfull. Je to nutne pro fungovani nekterych systemovych veci (typicky sit). Pokud takove chovani nechcete, musite pouzit rootless docker nebo novejsi varianty typu podman apod.
-
docker je bezpečnostní riziko už od svého počátku, tváří se, že to je řešení pro bezpečné uzavření aplikací (security sandbox), ale on dělá pravý opak. Ani nastavení nonroot pro kontainer neřeší všechny zranitelnosti a úníky.
-
Na hostitelském počítači, jako běžný uživatel, který je ve skupině "docker", si vytvořím kontainter, v tomto kontaineru mám root.
pokud do tohoto kontaineru nasdílím nějaký adresář hostitele,
docker run -v ...
Tak mohu z kontaineru do tohoto adresáře hostitele vytvářet soubory, které se na hostiteli tváří, že je vlastní root.
Navíc mohu takovémuto souboru z kontaineru nastavit s-bit .
Není toto díra ?
Je potřeba s tím počítat. Já na prod používám výhradně root LESS podman. Je s tím více prcání, především pokud autoři container image počítají s tím, že container poběží jako root, ale za tu bezpečnost to stojí.
-
Tak mohu z kontaineru do tohoto adresáře hostitele vytvářet soubory, které se na hostiteli tváří, že je vlastní root.
Navíc mohu takovémuto souboru z kontaineru nastavit s-bit .
Může a nemusí. To záleží jak je to nastavené. Samozřejmě pokud ti Docker kontejner jede pod rootem jisté možnosti escapovat tam jsou.
Pokud možno spouštět kontejner jako low prilivege user ;)
Pokud potřebuješ prověřit můžeš zkusit projet v kontejneru např v deepce >>
https://github.com/stealthcopter/deepce
PS: Pokud si nejsi jistý napiš SZ ... mužem na to mrknout ;)
-
Docker, vzdy bezi jen pod rootem, proto vznikl Podman kterej jde rozbehat i pod user spacem...
Staci vybrat <user> a rict mu ze muze poustet i nizsi procesy
sudo sh -c "echo '<user>:100000:65536' >> /etc/subuid"
sudo sh -c "echo '<user>:100000:65536' >> /etc/subgid"
A potom mu povolit behani na pozadi
sudo loginctl enable-linger <user>
Pak jsem to musel rebootnout, ale treba to jde i bez toho
-
Díra je v tom, že pokud má usere(lowlevel) ve skupině docker nebo LXD/LXC můžeš přes kontejner(který si rozjedes) přistupovat k hostiteli jako root. Takže privilege escalation
Vytvoreni souboru s pravy roota uvnitr slozky, kterou predem definuji jako sdilenou mezi hostitelem/kontejnerem, ale neni privilege escalation....
To ze vytvorim soubor, co patri rootovi, prece jeste neznamena, ze ho dokazi jako root hostitele i spustit....
Co mi prosim unika?
-
Díra je v tom, že pokud má usere(lowlevel) ve skupině docker nebo LXD/LXC můžeš přes kontejner(který si rozjedes) přistupovat k hostiteli jako root. Takže privilege escalation
Vytvoreni souboru s pravy roota uvnitr slozky, kterou predem definuji jako sdilenou mezi hostitelem/kontejnerem, ale neni privilege escalation....
To ze vytvorim soubor, co patri rootovi, prece jeste neznamena, ze ho dokazi jako root hostitele i spustit....
Co mi prosim unika?
problém je, že si můžeš moutnout jako root cely hostitelsky fs
třeba
https://flast101.github.io/docker-privesc/
https://juggernaut-sec.com/docker-breakout-lpe/
-
> problém je, že si můžeš moutnout jako root cely hostitelsky fs
no ano, docker je takto navržený od začátku. docker běžící pod rootem vůbec nefunguje a snad ani nikdy neměl fungovat jako bezpečnostní izolace.
-
A kde tam vlastne vidis jakou diru?
Díra je v tom, že pokud má usere(lowlevel) ve skupině docker nebo LXD/LXC můžeš přes kontejner(který si rozjedes) přistupovat k hostiteli jako root. Takže privilege escalation
Není to privilege escalation, protože členství ve skupině docker je efektivně ekvivalentní tomu být root. Podobně jako třeba členství ve skupině wheel.
Docker nebyl navržen jako bezpečnostní izolace. Pak se to pokusili spravit rootless módem, ale jestli tomu někdo věří…
-
Díra je v tom, že pokud má usere(lowlevel) ve skupině docker nebo LXD/LXC můžeš přes kontejner(který si rozjedes) přistupovat k hostiteli jako root. Takže privilege escalation
Vytvoreni souboru s pravy roota uvnitr slozky, kterou predem definuji jako sdilenou mezi hostitelem/kontejnerem, ale neni privilege escalation....
To ze vytvorim soubor, co patri rootovi, prece jeste neznamena, ze ho dokazi jako root hostitele i spustit....
Co mi prosim unika?
problém je, že si takhle můžeš vytvořit soubor pod rootem a ještě mu dát suid bit, to pak je privilege escalation. Omezování cest, které se dají mountnout nemá valný smysl. Tohle je triviální příklad, problém je, že komunikuješ s docker daemon, který má prává roota a defakto neexistují mechanismy, které by to dokázaly nějak efektivně omezit, vše jsou jen obezličky a workaroundy. Docker není bezpečné prostředí pro spouštění cizího kódu.
Jednoduché to nemají ani cloudy, však azure, aws už měli několik průníků právě díky tomu, jak docker a docker registry fungují :). Nejhorší je, že to není nová věc, to tady je od začátku, od začátku to je známé a zdokumentované, od začátku byl tak docker vytvořen, ale pak příjde nová generace, zapomene se na to a ouha, problém je na světě. Docker měl být od začátku jako nástroj pro roota, stejně jako jsou tady jiné technologie a ne že tady má zadní vrátka přes root socket pod skupinou docker a ještě v návodech ti říká, přidej si skupinu docker, budeš king. Pak tohle chování není vůbec vidět, je schované a víme, že schovávat cokoliv, co má ultimátní oprávnění je vždy špatně. Kdyby se docker musel volat se sudo, hned to každého trkne, to že to obchází je kardiální chyba autorů dockeru.
-
ne že tady má zadní vrátka přes root socket pod skupinou docker a ještě v návodech ti říká, přidej si skupinu docker, budeš king. Pak tohle chování není vůbec vidět, je schované a víme, že schovávat cokoliv, co má ultimátní oprávnění je vždy špatně. Kdyby se docker musel volat se sudo, hned to každého trkne, to že to obchází je kardiální chyba autorů dockeru.
Je pravda, že Docker není bezpečnostní řešení a je chyba ho tak používat. Ale taky je nutno podotknout, že autoři na bezpečnost dbají a přímé vyskočení ze správně nastaveného kontejneru tady dlouho nebylo.
Docker se normálně spouští přes sudo a možnost přidání uživatele do skupiny docker je s varováním, že ten uživatel prakticky dostává roota. Pro neprivilegované uživatele nebo zranitelné kontejnery se doporučuje Rootless režim.
-
Pro neprivilegované uživatele nebo zranitelné kontejnery se doporučuje Rootless režim.
No jo, ale rootless rezim neni jak aktualizovat, v dokumentaci to dodnes neni...