<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Model **autoryzacji** Docker'a "out-of-the-box" to "wszystko albo nic". Każdy użytkownik mający uprawnienia dostępu do demona Docker może uruchamiać dowolne polecenia klienta Docker. To samo dotyczy wywołań korzystających z interfejsu API silnika Docker do kontaktu z demonem. Jeśli wymagasz większej kontroli dostępu, możesz tworzyć wtyczki autoryzacji i dodawać je do konfiguracji demona Docker. Dzięki wtyczce autoryzacji administrator Docker'a może konfigurować szczegółowe polityki dostępu do zarządzania dostępem do demona Docker.
Wtyczki autoryzacji Docker są **zewnętrznymi wtyczkami**, które można używać do **zezwolenia/odmowy****działań** żądanych przez demona Docker, w zależności od **użytkownika**, który je żąda, i **działania****żądanego**.
**[Następujące informacje pochodzą z dokumentacji](https://docs.docker.com/engine/extend/plugins_authorization/#:~:text=If%20you%20require%20greater%20access,access%20to%20the%20Docker%20daemon)**
Kiedy **żądanie HTTP** jest przesyłane do demona Docker przez CLI lub za pośrednictwem interfejsu API silnika, **podsystem autoryzacji** przekazuje żądanie zainstalowanym **wtyczkom autoryzacji**. Żądanie zawiera użytkownika (wywołującego) i kontekst polecenia. Wtyczka jest odpowiedzialna za decyzję, czy zezwolić czy odmówić żądania.
Każde żądanie wysłane do wtyczki **zawiera uwierzytelnionego użytkownika, nagłówki HTTP i treść żądania/odpowiedzi**. Do wtyczki przekazywane są tylko **nazwa użytkownika** i **metoda uwierzytelniania** użyta. Co najważniejsze, **nie przekazywane są żadne dane uwierzytelniające użytkownika ani tokeny**. Wtyczce autoryzacji przekazywane są tylko te treści żądania/odpowiedzi, w których `Content-Type` to `text/*` lub `application/json`.
Dla poleceń, które mogą potencjalnie przejąć połączenie HTTP (`HTTP Upgrade`), takich jak `exec`, wtyczka autoryzacji jest wywoływana tylko dla początkowych żądań HTTP. Po zatwierdzeniu polecenia przez wtyczkę, autoryzacja nie jest stosowana do reszty przepływu. W szczególności, dane strumieniowe nie są przekazywane do wtyczek autoryzacji. Dla poleceń, które zwracają odpowiedź HTTP w postaci porcjowanej (chunked), takich jak `logs` i `events`, tylko żądanie HTTP jest przekazywane do wtyczek autoryzacji.
Podczas przetwarzania żądania/odpowiedzi niektóre przepływy autoryzacji mogą wymagać dodatkowych zapytań do demona Docker. Aby ukończyć takie przepływy, wtyczki mogą wywoływać interfejs API demona podobnie jak zwykły użytkownik. Aby umożliwić te dodatkowe zapytania, wtyczka musi zapewnić środki umożliwiające administratorowi skonfigurowanie odpowiednich polityk uwierzytelniania i zabezpieczeń.
Jesteś odpowiedzialny za **zarejestrowanie** swojej **wtyczki** jako części uruchamiania demona Docker. Możesz zainstalować **wiele wtyczek i połączyć je ze sobą**. Ta łańcuchowa konfiguracja może być uporządkowana. Każde żądanie do demona przechodzi przez łańcuch w określonej kolejności. Dostęp jest przyznawany tylko wtedy, gdy **wszystkie wtyczki zezwalają na dostęp** do zasobu.
Wtyczka [**authz**](https://github.com/twistlock/authz) pozwala na utworzenie prostego pliku **JSON**, który wtyczka będzie odczytywać w celu autoryzacji żądań. Daje to możliwość łatwej kontroli, które punkty końcowe API mogą osiągnąć poszczególni użytkownicy.
Na stronie [route\_parser.go](https://github.com/twistlock/authz/blob/master/core/route\_parser.go) znajdziesz zależność między żądanym adresem URL a działaniem. Na stronie [types.go](https://github.com/twistlock/authz/blob/master/core/types.go) znajdziesz zależność między nazwą działania a działaniem.
Możesz znaleźć **łatwą do zrozumienia wtyczkę** z szczegółowymi informacjami na temat instalacji i debugowania tutaj: [**https://github.com/carlospolop-forks/authobot**](https://github.com/carlospolop-forks/authobot)
Aby przeprowadzić to wyliczanie, możesz **użyć narzędzia** [**https://github.com/carlospolop/docker\_auth\_profiler**](https://github.com/carlospolop/docker\_auth\_profiler)**.**
W tym przypadku administrator systemu **zakazał użytkownikom montowania woluminów i uruchamiania kontenerów z flagą `--privileged`** lub nadawania kontenerowi dodatkowych uprawnień:
Teraz użytkownik może uciec z kontenera, korzystając z dowolnej z [**wcześniej omówionych technik**](./#privileged-flag) i **podnieść uprawnienia** wewnątrz hosta.
W tym przypadku administrator systemu **zakazał użytkownikom uruchamiania kontenerów z flagą `--privileged`** lub nadawania kontenerowi dodatkowych uprawnień, a jedynie umożliwił zamontowanie folderu `/tmp`:
Zauważ, że być może nie możesz zamontować folderu `/tmp`, ale możesz zamontować **inny folder z możliwością zapisu**. Możesz znaleźć foldery z możliwością zapisu, używając polecenia: `find / -writable -type d 2>/dev/null`
**Należy pamiętać, że nie wszystkie foldery w systemie Linux obsługują bit suid!** Aby sprawdzić, które foldery obsługują bit suid, uruchom polecenie `mount | grep -v "nosuid"`. Na przykład zazwyczaj foldery `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` i `/var/lib/lxcfs` nie obsługują bitu suid.
Należy również zauważyć, że jeśli można **zamontować folder `/etc`** lub inny folder **zawierający pliki konfiguracyjne**, można je zmienić z kontenera Docker jako root, aby **wykorzystać je na hoście** i eskalować uprawnienia (może to obejmować modyfikację pliku `/etc/shadow`).
Odpowiedzialność administratora systemu konfigurującego ten plugin polega na kontrolowaniu, jakie działania i z jakimi uprawnieniami może wykonywać każdy użytkownik. Dlatego jeśli administrator podejmuje **czarną listę** punktów końcowych i atrybutów, może **pominąć niektóre z nich**, które mogą umożliwić atakującemu **eskalację uprawnień**.
Możliwe jest, że podczas konfigurowania zapory ogniowej Dockera, administrator systemu **pominął pewien ważny parametr** [**API**](https://docs.docker.com/engine/api/v1.40/#operation/ContainerList), taki jak "**Binds**".\
W poniższym przykładzie można wykorzystać tę nieprawidłową konfigurację do utworzenia i uruchomienia kontenera, który montuje folder root (/) hosta:
Zauważ, że w tym przykładzie używamy parametru **`Binds`** jako klucza na poziomie głównym w JSON, ale w interfejsie API występuje on pod kluczem **`HostConfig`**
Możliwe, że podczas konfigurowania zapory dockerowej przez sysadmina, **zapomniał o pewnym ważnym atrybucie parametru** [**API**](https://docs.docker.com/engine/api/v1.40/#operation/ContainerList), takim jak "**Capabilities**" wewnątrz "**HostConfig**". W poniższym przykładzie można wykorzystać tę nieprawidłową konfigurację, aby utworzyć i uruchomić kontener z uprawnieniem **SYS\_MODULE**:
**`HostConfig`** to klucz, który zazwyczaj zawiera **interesujące****uprawnienia**, które umożliwiają ucieczkę z kontenera. Jednak, jak już wcześniej omówiliśmy, zauważ, że korzystanie z Binds poza nim również działa i może umożliwić ominiecie ograniczeń.
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.