Docker release_agent cgroups escape
Для отримання додаткових відомостей дивіться оригінальний пост у блозі. Це лише краткий огляд:
Оригінальний PoC:
Доказ концепції (PoC) демонструє метод використання cgroups шляхом створення файлу release_agent
та спровокування його виклику для виконання довільних команд на контейнерному хості. Ось розбір кроків, що включаються:
Підготовка середовища:
Створюється каталог
/tmp/cgrp
для використання як точка монтування cgroup.Контролер cgroup RDMA монтується до цього каталогу. У випадку відсутності контролера RDMA рекомендується використовувати контролер cgroup
memory
як альтернативу.
Налаштування дочірнього Cgroup:
В монтуємому каталозі cgroup створено дочірній cgroup з назвою "x".
Сповіщення увімкнені для cgroup "x", записавши 1 у файл notify_on_release.
Налаштування агента вивільнення:
Шлях контейнера на хості отримується з файлу /etc/mtab.
Потім файл release_agent cgroup налаштовується на виконання скрипта з назвою /cmd, розташованого за отриманим шляхом хоста.
Створення та налаштування сценарію /cmd:
Сценарій /cmd створюється всередині контейнера та налаштовується для виконання ps aux, перенаправляючи вивід у файл з назвою /output у контейнері. Вказується повний шлях до /output на хості.
Запуск атаки:
Процес запускається в дитячому cgroup "x" і негайно припиняється.
Це спричиняє виконання
release_agent
(скрипту /cmd), який виконує ps aux на хості та записує вивід до /output всередині контейнера.
Last updated