release_agent exploit - Relative Paths to PIDs
Для отримання додаткової інформації перевірте блог-порт з https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Це лише краткий опис:
Техніка описує метод виконання коду хоста зсередини контейнера, подолання викликів, які виникають внаслідок конфігурацій драйверів сховища, які приховують шлях файлової системи контейнера на хості, наприклад, Kata Containers або конкретні налаштування devicemapper
.
Ключові кроки:
Визначення ідентифікаторів процесів (PIDs): З використанням символічного посилання
/proc/<pid>/root
в псевдо-файловій системі Linux можна отримати доступ до будь-якого файлу всередині контейнера відносно файлової системи хоста. Це обходить необхідність знати шлях файлової системи контейнера на хості.PID Bashing: Використовується метод грубої сили для пошуку PIDs на хості. Це робиться шляхом послідовної перевірки наявності конкретного файлу за шляхом
/proc/<pid>/root/<file>
. Коли файл знайдено, це вказує на те, що відповідний PID належить процесу, який працює всередині цільового контейнера.Запуск виконання: Вгаданий шлях PID записується у файл
cgroups release_agent
. Ця дія запускає виконанняrelease_agent
. Успішне виконання цього кроку підтверджується перевіркою створення вихідного файлу.
Процес експлуатації
Процес експлуатації включає більш детальний набір дій, спрямованих на виконання навантаження на хості, вгадуючи правильний PID процесу, який працює всередині контейнера. Ось як це відбувається:
Ініціалізація середовища: Скрипт навантаження (
payload.sh
) готується на хості, і створюється унікальний каталог для маніпулювання cgroup.Підготовка навантаження: Скрипт навантаження, який містить команди для виконання на хості, записується і робиться виконуваним.
Налаштування Cgroup: Cgroup монтується і налаштовується. Прапор
notify_on_release
встановлюється для забезпечення виконання навантаження при вивільненні cgroup.Груба сила PID: Цикл проходить через потенційні PIDs, записуючи кожний вгаданий PID у файл
release_agent
. Це ефективно встановлює скрипт навантаження якrelease_agent
.Запуск та перевірка виконання: Для кожного PID
cgroup.procs
записується, що спричиняє виконанняrelease_agent
, якщо PID правильний. Цикл продовжується, доки не буде знайдено вихідний файл скрипта навантаження, що вказує на успішне виконання.
PoC з блог-посту:
Last updated