
CTF-задание, развертывающее эксплойт CVE-2022-0847 (Dirty Pipe) для перезаписи файлов, доступных только для чтения. Включает скрипты настройки, подсказки и проверку для практики эксплуатации ядра.
Для этого задания вам нужно перезаписать файл "cat.txt", доступный только для чтения, с помощью эксплойта CVE-2022-0847. Существует множество способов сделать это с помощью эксплойта.
Убедитесь, что файл 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.