Развертывание Dirty Pipe
Для этого задания вам нужно перезаписать файл "cat.txt", доступный только для чтения, с помощью эксплойта CVE-2022-0847.
Существует множество способов сделать это с помощью эксплойта.
Зависимости
- Ядро Linux версии 5.8 или новее (уязвимое)
- gcc (GNU Compiler Collection) для компиляции кода эксплойта
Первоначальная настройка
- Настройка уязвимого окружения:
- Для пользователей Linux:
- Используйте дистрибутив Linux с версией ядра 5.8 или новее, но ниже исправленных версий:
- Исправленные версии включают 5.16.11, 5.15.25 и 5.10.102.
- Проверьте версию ядра в вашей системе, выполнив:
uname -r
- Если ваше ядро уже исправлено, возможно, потребуется откатить версию или использовать другую установку Linux, соответствующую критериям уязвимости.
- Для пользователей Windows:
- Установите виртуальную машину:
- Загрузите и установите виртуальную машину, например Oracle VM VirtualBox или VMware.
- Загрузите уязвимый дистрибутив Linux:
- Посетите архивы Kali Linux, чтобы загрузить более старую версию Kali Linux.
- Рекомендуемые версии включают любой выпуск с ядром 5.8–5.15 (например, Kali 2021.1).
- Кроме того, подойдут другие дистрибутивы Linux с соответствующими версиями ядра (например, более старые версии Ubuntu или Debian).
- Настройте виртуальную машину:
- Создайте новую виртуальную машину в VirtualBox:
- Выделите не менее 2 ГБ ОЗУ и 10 ГБ дискового пространства.
- Используйте загруженный ISO-файл для установки дистрибутива Linux.
- После установки проверьте версию ядра, выполнив:
uname -r
- Установите необходимые инструменты:
- После настройки окружения убедитесь, что установлены следующие инструменты:
- gcc: требуется для компиляции кода эксплойта.
- make: для сборки проектов при необходимости.
- Обновите менеджер пакетов и установите инструменты:
sudo apt update
sudo apt install gcc make -y
Запуск задания
- Запуск:
Обязательно проверьте версию ядра!
Используйте эту ссылку GitHub (https://github.com/basharkey/CVE-2022-0847-dirty-pipe-checker.git)
Убедитесь, что файл cat.txt доступен только для чтения.
Ограничения:
атакующий должен иметь права на чтение (поскольку ему нужно выполнить splice() страницы в канал)
смещение не должно находиться на границе страницы (поскольку хотя бы один байт этой страницы должен быть передан в канал через splice())
запись не должна пересекать границу страницы (поскольку для остальной части был бы создан новый анонимный буфер)
файл не может быть изменён в размере (поскольку канал имеет собственное управление заполнением страниц и не сообщает кэшу страниц, сколько данных было добавлено)
- Развертывание эксплойта:
-
Создайте канал.
-
Заполните канал произвольными данными (чтобы установить флаг PIPE_BUF_FLAG_CAN_MERGE во всех записях кольца).
-
Опустошите канал (оставив флаг установленным во всех экземплярах struct pipe_buffer в кольце struct pipe_inode_info).
-
Выполните splice данных из целевого файла (открытого с O_RDONLY) в канал, начиная непосредственно перед целевым смещением.
-
Запишите произвольные данные в канал; эти данные перезапишут кэшированную страницу файла вместо создания нового анонимного экземпляра struct pipe_buffer, поскольку установлен флаг PIPE_BUF_FLAG_CAN_MERGE.
-
Перезапишите cat.txt, измените
I'm a cat
1444
на
I'm a dog
2025
-
Используйте check_cat.sh, чтобы проверить, сработало ли это
chmod +x check_cat.sh
./check_cat.sh
Повторное создание задания
Используйте следующее
chmod +x cat_generate.sh
./cat_generate.sh
Публикация задания
Подсказки находятся в hints.txt.