Категория > Новости > Используй, свободно! Как работает уязвимость use-after-free в почтовике Exim - «Новости»
Используй, свободно! Как работает уязвимость use-after-free в почтовике Exim - «Новости»19-12-2017, 10:00. Автор: Cooper |
Содержание статьи
Баг был обнаружен исследователем под ником Meh из тайваньской компании Devcore. Проблема связана с некорректной реализацией логики работы при отправке писем частями (чанками). В результате отправки специально сформированного сообщения?возникает ошибка типа use-after-free. Уязвимость позволяет атакующему вызвать отказ в обслуживании и даже выполнить произвольный код на целевой системе. Готовимся к тестированиюДля более удобного исследования начать лучше всего с организации тестового стенда. Я рекомендую использовать Docker, потому что?контейнер позволяет быстро поднять и настроить нужное нам окружение. Чтобы тебе не пришлось возиться, я уже собрал готовый докер-файл, который ты можешь скачать из моего репозитория и быстренько развернуть уязвимую версию Exim. После запуска контейнера сам сервер запускается командой
Ключ Также нелишним будет вооружиться отладчиком Если?хочешь безболезненно потестить эксплоиты Meh, то рекомендую запустить еще один контейнер, так как в эксплоитах используется библиотека pwntools, которая не завелась у меня в Windows и требует Linux для х64.
Пара слов о чанкингеКак и HTTP с его динамическими пакетами, SMTP поддерживает отправку писем частями, без указания?точного размера передаваемых данных. За это отвечает механизм из Extended SMTP под названием chunking. Он подробно описан в разделе 4.1 спецификации RFC 3030, где выступает под именем SMTP Service Extensions for Transmission of Large and Binary MIME Messages («расширения протокола SMTP для передачи больших и бинарных сообщений» — перевел как смог!). Передача писем частями?впервые была реализована в Exim версии 4.88. Формат команды для передачи сообщения частями такой:
Символом окончания передачи чанка служит точка в начале новой строки. Последний чанк должен иметь нулевую длину или обозначаться кодовым словом LAST. Подробнее об?уязвимостиСамый простой PoC вызывается следующими командами к серверу SMTP.
Сервер будет спамить сообщением с кодом 250, уведомляя, что получен чанк размером 0 байт. ![]() После череды безуспешных попыток процесс упадет. Вообще, исследователь выложил две версии работающих PoC эксплоитов. Скачать их можно из треда об уязвимости на «Багзилле»?или по прямым ссылкам (одна и другая). Судя по названию, эксплоит позволяет контролировать регистр RIP. Для того чтобы эксплоит отработал на твоей системе, тебе придется подобрать корректный размер передаваемых данных на первом шаге. Пойдем по порядку. Сначала посмотрим на файл /src/receive.c
Сервер Exim имеет в своем распоряжении простой инструмент для управления кучей (heap), он располагается в файле /src/store.h
Первым шагом (после подключения к серверу, конечно) в эксплоите будет отправка пачки невалидных данных в качестве команды. Это нужно для того, чтобы отрегулировать значение переменной Перейти обратно к новости |