
Визуализация, фаззинг, эксплойт и патч уязвимости Baron Samedit
Визуализация, фаззинг, эксплойт и патч уязвимости Baron Samedit
Посмотреть отчёт »
Francesco Marchiori
·
Alessandro Lotto
Любая Unix-подобная операционная система оснащена командой sudo, которая позволяет временно повышать привилегии до root для тех пользователей, которым это разрешено. Sudo предоставляет критически важную функциональность, злоупотребление которой может привести к компрометации безопасности и надёжности самой системы. Из-за её важности в операционной системе исходный код sudo регулярно тестируется и подвергается ревью. Эти проверки позволили обнаружить уязвимость переполнения кучи, названную CVE-2021-3156, которая, как ни удивительно, оставалась скрытой почти 10 лет. Даже методы фаззинга — одни из наиболее часто используемых для поиска ошибок и уязвимостей — не смогли выявить её раньше. В этой статье мы подробно анализируем уязвимость sudo CVE-2021-3156, начиная с уязвимости переполнения буфера и заканчивая тем, как её можно эксплуатировать для получения root-оболочки, даже будучи непривилегированным пользователем или не имея разрешения на использование команды sudo.
В каталоге Visualization находятся несколько скриптов, которые мы использовали для визуализации того, как разбираются аргументы с символом обратной косой черты и без него, а также для анализа того, как переменные окружения влияют на структуру кучи, чтобы глубже понять структуру предложенного эксплойта.
В каталоге Fuzzing находятся файлы, необходимые для проведения фаззинга уязвимой версии sudo. Также описано, как настроить фаззинг и как решить проблемы, мешающие AFL работать «из коробки», что объясняет, почему уязвимость была скрыта почти 10 лет.
В каталоге Exploit находятся файлы, необходимые для проведения атаки на другую уязвимую версию sudo. Мы используем заполнение памяти через переменные окружения для выполнения heap feng shui и перезаписи имени объекта service_user, чтобы выполнить наш собственный код вместо загрузки библиотеки.
В каталоге Patch находится скрипт overflow_simulation_patch.c, который моделирует поведение переполнения и исправляет его с помощью дополнительного кода, написанного нами. Поскольку разработчики проекта Sudo решили исправить поток уязвимости, а не сам код, мы показываем другой подход и то, как его можно исправить всего несколькими строками кода.