Используй, свободно! Как работает уязвимость use-after-free в почтовике Exim - «Новости»
«Эпический» сериал Netflix по Assassin’s Creed впервые за несколько лет подал признаки жизни - «Новости сети»
«Эпический» сериал Netflix по Assassin’s Creed впервые за несколько лет подал признаки жизни - «Новости сети»
«Хуже моего самого страшного кошмара»: утечка геймплея с тестирования новой The Sims ужаснула фанатов - «Новости сети»
«Хуже моего самого страшного кошмара»: утечка геймплея с тестирования новой The Sims ужаснула фанатов - «Новости сети»
Самые полные издания Borderlands 3 и Diablo III добавят в Game Pass, а лучшая игра 2024 года по версии 3DNews подписку скоро покинет - «Новости сети»
Самые полные издания Borderlands 3 и Diablo III добавят в Game Pass, а лучшая игра 2024 года по версии 3DNews подписку скоро покинет - «Новости сети»
Amazon включилась в борьбу за американский бизнес TikTok - «Новости сети»
Amazon включилась в борьбу за американский бизнес TikTok - «Новости сети»
«Яндекс» представил «Нейроэксперта» — ИИ, который соберёт базу знаний по ссылкам и файлам пользователя - «Новости сети»
«Яндекс» представил «Нейроэксперта» — ИИ, который соберёт базу знаний по ссылкам и файлам пользователя - «Новости сети»
ZA/UM отреагировала на утечку «одиночной кооперативной игры» Locust City во вселенной Disco Elysium - «Новости сети»
ZA/UM отреагировала на утечку «одиночной кооперативной игры» Locust City во вселенной Disco Elysium - «Новости сети»
GTA V вернётся в Game Pass, причём совсем скоро — впервые игра будет доступна в PC Game Pass - «Новости сети»
GTA V вернётся в Game Pass, причём совсем скоро — впервые игра будет доступна в PC Game Pass - «Новости сети»
Обзор системы резервного копирования и восстановления данных «Кибер Бэкап Малый Бизнес» - «Новости сети»
Обзор системы резервного копирования и восстановления данных «Кибер Бэкап Малый Бизнес» - «Новости сети»
Nintendo создала гибридный эмулятор Switch, но работать он будет только на Switch 2 - «Новости сети»
Nintendo создала гибридный эмулятор Switch, но работать он будет только на Switch 2 - «Новости сети»
Лавкрафтианский хоррор Stygian: Outer Gods готовится к старту открытой «беты» — новый геймплейный трейлер - «Новости сети»
Лавкрафтианский хоррор Stygian: Outer Gods готовится к старту открытой «беты» — новый геймплейный трейлер - «Новости сети»
Новости мира Интернет » Новости » Используй, свободно! Как работает уязвимость use-after-free в почтовике Exim - «Новости»

Содержание статьи

  • Пара слов о чанкинге
  • Демонстрация уязвимости (видео)
В самом?популярном на сегодняшний день почтовом сервере Exim был обнаружен опасный баг: если отправить специально сформированное сообщение, то потенциально можно выполнить произвольный код на целевой системе. Как это работает и как этим воспользоваться, чтобы получить контроль над сервером? Давай разберемся.

Баг был обнаружен исследователем под ником Meh из тайваньской компании Devcore. Проблема связана с некорректной реализацией логики работы при отправке писем частями (чанками). В результате отправки специально сформированного сообщения?возникает ошибка типа use-after-free. Уязвимость позволяет атакующему вызвать отказ в обслуживании и даже выполнить произвольный код на целевой системе.


Готовимся к тестированию


Для более удобного исследования начать лучше всего с организации тестового стенда. Я рекомендую использовать Docker, потому что?контейнер позволяет быстро поднять и настроить нужное нам окружение.


Чтобы тебе не пришлось возиться, я уже собрал готовый докер-файл, который ты можешь скачать из моего репозитория и быстренько развернуть уязвимую версию Exim.


После запуска контейнера сам сервер запускается командой


/usr/exim/bin/exim -bdf -d+all

Ключ -d+all нужен для?отображения на экране подробного лога работы.



Запущенный демон почтового сервера Exim 4.89

Также нелишним будет вооружиться отладчиком gdb, чтобы контролировать процесс выполнения приложения. В самом отладчике нужно выполнить команду set follow-fork-mode child, потому что Exim запускается в режиме?демона, а при подключении клиента он создает отдельный форк для обработки соединения. Эта опция поможет переключиться на новоиспеченный процесс.



Включение отладки дочерних процессов в gdb

Если?хочешь безболезненно потестить эксплоиты Meh, то рекомендую запустить еще один контейнер, так как в эксплоитах используется библиотека pwntools, которая не завелась у меня в Windows и требует Linux для х64.


docker build -t . pocexim
docker run --rm -ti --link=exim4 --hostname=pocexim pocexim /bin/bash

Пара слов о чанкинге


Как и HTTP с его динамическими пакетами, SMTP поддерживает отправку писем частями, без указания?точного размера передаваемых данных. За это отвечает механизм из Extended SMTP под названием chunking. Он подробно описан в разделе 4.1 спецификации RFC 3030, где выступает под именем SMTP Service Extensions for Transmission of Large and Binary MIME Messages («расширения протокола SMTP для передачи больших и бинарных сообщений» — перевел как смог!). Передача писем частями?впервые была реализована в Exim версии 4.88.


Формат команды для передачи сообщения частями такой:


BDAT <размер_сообщения>
<сообщение>

Символом окончания передачи чанка служит точка в начале новой строки. Последний чанк должен иметь нулевую длину или обозначаться кодовым словом LAST.


Подробнее об?уязвимости


Самый простой PoC вызывается следующими командами к серверу SMTP.


EHLO localhost
MAIL FROM:<test@localhost>
RCPT TO:<test@localhost>
BDAT 10
.
BDAT 0

Сервер будет спамить сообщением с кодом 250, уведомляя, что получен чанк размером 0 байт.


Используй, свободно! Как работает уязвимость use-after-free в почтовике Exim - «Новости»

Результат отправки простого PoC

После череды безуспешных попыток процесс упадет.


Вообще, исследователь выложил две версии работающих PoC эксплоитов. Скачать их можно из треда об уязвимости на «Багзилле»?или по прямым ссылкам (одна и другая).


Судя по названию, эксплоит позволяет контролировать регистр RIP. Для того чтобы эксплоит отработал на твоей системе, тебе придется подобрать корректный размер передаваемых данных на первом шаге.



PoC успешно отработал

Пойдем по порядку. Сначала посмотрим на файл receive.c.


/src/receive.c

1783:
if (!store_extend(next->text, oldsize, header_size))
1784:
{
1785:
uschar *newtext = store_get(header_size);
1786:
memcpy(newtext, next->text, ptr);
1787:
store_release(next->text);
1788:
next->text = newtext;
1789:

1790:


Сервер Exim имеет в своем распоряжении простой инструмент для управления кучей (heap), он располагается в файле store.c. Функция store_extend наряду с store_get и store_release как раз относится к этому инструментарию. Эти три функции и играют ключевую роль в возникновении?уязвимости. Если точнее, то это обертки для реальных функций с суффиксами _3.


/src/store.h

30: #define store_extend(addr,old,new) 
31:
store_extend_3(addr, old, new, __FILE__, __LINE__)
...
34: #define store_get(size)
store_get_3(size, __FILE__, __LINE__)
...
48: extern void
store_release_3(void *, const char *, int);  /* so give its  */

Первым шагом (после подключения к серверу, конечно) в эксплоите будет отправка пачки невалидных данных в качестве команды. Это нужно для того, чтобы отрегулировать значение переменной yield_length. Она?отвечает за оставшийся размер кучи.


Источник новостиgoogle.com
Цитирование статьи, картинки - фото скриншот - Rambler News Service.
Иллюстрация к статье - Яндекс. Картинки.
Есть вопросы. Напишите нам.
Общие правила  поведения на сайте.

Содержание статьи Пара слов о чанкинге Демонстрация уязвимости (видео) В самом?популярном на сегодняшний день почтовом сервере Exim был обнаружен опасный баг: если отправить специально сформированное сообщение, то потенциально можно выполнить произвольный код на целевой системе. Как это работает и как этим воспользоваться, чтобы получить контроль над сервером? Давай разберемся. Баг был обнаружен исследователем под ником Meh из тайваньской компании Devcore. Проблема связана с некорректной реализацией логики работы при отправке писем частями (чанками). В результате отправки специально сформированного сообщения?возникает ошибка типа use-after-free. Уязвимость позволяет атакующему вызвать отказ в обслуживании и даже выполнить произвольный код на целевой системе. Готовимся к тестированию Для более удобного исследования начать лучше всего с организации тестового стенда. Я рекомендую использовать Docker, потому что?контейнер позволяет быстро поднять и настроить нужное нам окружение. Чтобы тебе не пришлось возиться, я уже собрал готовый докер-файл, который ты можешь скачать из моего репозитория и быстренько развернуть уязвимую версию Exim. После запуска контейнера сам сервер запускается командой Ключ -d all нужен для?отображения на экране подробного лога работы. Запущенный демон почтового сервера Exim 4.89 Также нелишним будет вооружиться отладчиком gdb, чтобы контролировать процесс выполнения приложения. В самом отладчике нужно выполнить команду set follow-fork-mode child, потому что Exim запускается в режиме?демона, а при подключении клиента он создает отдельный форк для обработки соединения. Эта опция поможет переключиться на новоиспеченный процесс. Включение отладки дочерних процессов в gdb Если?хочешь безболезненно потестить эксплоиты 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 После череды безуспешных попыток процесс упадет. Вообще, исследователь выложил две версии работающих PoC эксплоитов. Скачать их можно из треда об уязвимости на «Багзилле»?или по прямым ссылкам (одна и другая). Судя по названию, эксплоит позволяет контролировать регистр RIP. Для того чтобы эксплоит отработал на твоей системе, тебе придется подобрать корректный размер передаваемых данных на первом шаге. PoC успешно отработал Пойдем по порядку. Сначала посмотрим на файл receive.c. /src/receive.c Сервер Exim имеет в своем распоряжении простой инструмент для управления кучей (heap), он располагается в файле store.c. Функция store_extend наряду с storeFiltered и store_release как раз относится к этому инструментарию. Эти три функции и играют ключевую роль в возникновении?уязвимости. Если точнее, то это обертки для реальных функций с суффиксами _3. /src/store.h Первым шагом (после подключения к серверу, конечно) в эксплоите будет отправка пачки невалидных данных в качестве команды. Это нужно для того, чтобы отрегулировать значение переменной yield_length. Она?отвечает за оставшийся размер кучи. Источник новости - google.com

запостил(а)
Cooper
Вернуться назад
0

Смотрите также

А что там на главной? )))



Комментарии )))