Je toto díra v Dockeru?

91314

Je toto díra v Dockeru?
« kdy: 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 ?


luvar

  • ***
  • 237
    • Zobrazit profil
    • E-mail
Re:Je toto díra v Dockeru?
« Odpověď #1 kdy: 18. 07. 2024, 13:52:49 »
Toto je cielene spravanie. Ak chcete, aby root z kontajnera nebol root na hostovi, tak treba pouzit user id mapping.

Re:Je toto díra v Dockeru?
« Odpověď #2 kdy: 18. 07. 2024, 14:23:11 »
A kde tam vlastne vidis jakou diru?

Re:Je toto díra v Dockeru?
« Odpověď #3 kdy: 18. 07. 2024, 14:49:02 »
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

Re:Je toto díra v Dockeru?
« Odpověď #4 kdy: 18. 07. 2024, 15:14:55 »
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.


Re:Je toto díra v Dockeru?
« Odpověď #5 kdy: 18. 07. 2024, 15:47:06 »
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.

Re:Je toto díra v Dockeru?
« Odpověď #6 kdy: 19. 07. 2024, 09:17:11 »
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í.

Re:Je toto díra v Dockeru?
« Odpověď #7 kdy: 19. 07. 2024, 09:19:24 »
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  ;)


Re:Je toto díra v Dockeru?
« Odpověď #8 kdy: 19. 07. 2024, 09:32:38 »
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

Re:Je toto díra v Dockeru?
« Odpověď #9 kdy: 19. 07. 2024, 12:57:07 »

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?

Re:Je toto díra v Dockeru?
« Odpověď #10 kdy: 19. 07. 2024, 13:29:29 »

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/


Jose D

  • *****
  • 885
    • Zobrazit profil
Re:Je toto díra v Dockeru?
« Odpověď #11 kdy: 19. 07. 2024, 15:11:15 »
> 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.

Re:Je toto díra v Dockeru?
« Odpověď #12 kdy: 19. 07. 2024, 17:39:09 »
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ěří…

Re:Je toto díra v Dockeru?
« Odpověď #13 kdy: 19. 07. 2024, 18:28:36 »

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.

tecka

  • ***
  • 147
    • Zobrazit profil
    • E-mail
Re:Je toto díra v Dockeru?
« Odpověď #14 kdy: 19. 07. 2024, 19:32:26 »
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.