Доброго времени суток форумчане! Сегодня я хочу рассказать про уязвимость переполнения буфера кучи в сетевом коде ядра XNU который используется почти во всех продуктах Apple.
Поехали!
Уязвимая версия: iOS 12
Heap overflow - Данные атаки не так хорошо изучены и описаны, по сравнению со stack overflow, но, тем не менее, широко распространены. Для хранения очень больших объемов данных часто используют heap - специальную область памяти, которая, в отличие от стека, растет вверх. В heap-based переполнении мы можем переписать указатели (например, указатель на файл - подставить туда свое значение, допустим /etc/shadow и если процесс запущен под рутом, то мы увидим содержимое этого файла), указатели на функции (к примеру, заменить адрес функции на адрес нашего шеллкода). Проблема все та же - использование небезопасных функций, отсутствие проверки границ, исполняемый heap.
Уязвимсть заключается в сетевом коде ядра операционной системы XNU. Там стоит плохая защита которая не блокирует "вредные" пакеты и принимает как обычные. В итоге крашиться ядро и устройство перезагружаеться. Так как XNU используется как в iOS, так и в macOS, поэтому все iPhone, iPad и MacBook затронуты данной уязвимостью. Так же вместо того что бы крашить ядро можно указать вместо адреса функции, указать адрес шеллкода и перехватить управление над устройством посредством удалённого выполнения кода.
Как выглядит отправляемый запрос на краш ядра:
В новой версии iOS / OSX исправили эту уязвимость добавив улучшенную проверку, но я считаю что данная уязвимость очень легка и есть масса способов обхода защиты в новых версиях iOS / OSX.
Переполнение происходит за счёт того что мы отправляем 44, 76 байт мусора в кучу. Программа записывает данные за пределом кучи и устройство перезагружается.
До атаки:
После атаки:
Это статья была бы не интересна без эксплойта.
Я написал эксплойт и выложил в своём профиле гитхаб.
Вот ссылка на репозиторий:NotEth1calHack3r/iOS-Kernel-Crash
Спасибо за прочтение моей статьи!
Поехали!
Уязвимая версия: iOS 12
Heap overflow - Данные атаки не так хорошо изучены и описаны, по сравнению со stack overflow, но, тем не менее, широко распространены. Для хранения очень больших объемов данных часто используют heap - специальную область памяти, которая, в отличие от стека, растет вверх. В heap-based переполнении мы можем переписать указатели (например, указатель на файл - подставить туда свое значение, допустим /etc/shadow и если процесс запущен под рутом, то мы увидим содержимое этого файла), указатели на функции (к примеру, заменить адрес функции на адрес нашего шеллкода). Проблема все та же - использование небезопасных функций, отсутствие проверки границ, исполняемый heap.
Уязвимсть заключается в сетевом коде ядра операционной системы XNU. Там стоит плохая защита которая не блокирует "вредные" пакеты и принимает как обычные. В итоге крашиться ядро и устройство перезагружаеться. Так как XNU используется как в iOS, так и в macOS, поэтому все iPhone, iPad и MacBook затронуты данной уязвимостью. Так же вместо того что бы крашить ядро можно указать вместо адреса функции, указать адрес шеллкода и перехватить управление над устройством посредством удалённого выполнения кода.
Как выглядит отправляемый запрос на краш ядра:
В новой версии iOS / OSX исправили эту уязвимость добавив улучшенную проверку, но я считаю что данная уязвимость очень легка и есть масса способов обхода защиты в новых версиях iOS / OSX.
Переполнение происходит за счёт того что мы отправляем 44, 76 байт мусора в кучу. Программа записывает данные за пределом кучи и устройство перезагружается.
До атаки:
После атаки:
Это статья была бы не интересна без эксплойта.
Я написал эксплойт и выложил в своём профиле гитхаб.
Вот ссылка на репозиторий:NotEth1calHack3r/iOS-Kernel-Crash
Спасибо за прочтение моей статьи!