release_agent exploit - Relative Paths to PIDs
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aby uzyskać więcej szczegółów, sprawdź wpis na blogu pod adresem https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. To tylko podsumowanie:
Technika opisuje metodę wykonywania kodu hosta z wnętrza kontenera, pokonując wyzwania związane z konfiguracjami sterowników pamięci, które ukrywają ścieżkę systemu plików kontenera na hoście, takie jak Kata Containers lub specyficzne ustawienia devicemapper
.
Kluczowe kroki:
Lokalizacja identyfikatorów procesów (PID): Używając symbolicznego linku /proc/<pid>/root
w pseudo-systemie plików Linux, można uzyskać dostęp do dowolnego pliku w kontenerze w odniesieniu do systemu plików hosta. To omija potrzebę znajomości ścieżki systemu plików kontenera na hoście.
Bashowanie PID: Zastosowano podejście brute force do przeszukiwania PID na hoście. Robi się to, sprawdzając kolejno obecność konkretnego pliku w /proc/<pid>/root/<file>
. Gdy plik zostanie znaleziony, wskazuje to, że odpowiadający PID należy do procesu działającego wewnątrz docelowego kontenera.
Wywołanie wykonania: Odgadnięta ścieżka PID jest zapisywana w pliku cgroups release_agent
. Ta akcja wywołuje wykonanie release_agent
. Sukces tego kroku potwierdza się, sprawdzając utworzenie pliku wyjściowego.
Proces eksploatacji obejmuje bardziej szczegółowy zestaw działań, mających na celu wykonanie ładunku na hoście poprzez odgadnięcie poprawnego PID procesu działającego wewnątrz kontenera. Oto jak to się rozwija:
Inicjalizacja środowiska: Skrypt ładunku (payload.sh
) jest przygotowywany na hoście, a unikalny katalog jest tworzony do manipulacji cgroup.
Przygotowanie ładunku: Skrypt ładunku, który zawiera polecenia do wykonania na hoście, jest zapisany i uczyniony wykonywalnym.
Konfiguracja cgroup: Cgroup jest montowany i konfigurowany. Flaga notify_on_release
jest ustawiona, aby zapewnić, że ładunek zostanie wykonany, gdy cgroup zostanie zwolniony.
Brute Force PID: Pętla iteruje przez potencjalne PID, zapisując każdy odgadnięty PID w pliku release_agent
. To skutecznie ustawia skrypt ładunku jako release_agent
.
Wywołanie i sprawdzenie wykonania: Dla każdego PID zapisywane jest cgroup.procs
cgroup, co wywołuje wykonanie release_agent
, jeśli PID jest poprawny. Pętla trwa, aż znajdzie się wyjście skryptu ładunku, co wskazuje na pomyślne wykonanie.
PoC z wpisu na blogu:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)