4 способа эксплуатации CVE-2024-20017: как всего одна уязвимость может разрушить вашу сеть

4 способа эксплуатации CVE-2024-20017: как всего одна уязвимость может разрушить вашу сеть

Переполнение буфера превращает ваши устройства в удобные цифровые мишени.

image

30 августа 2024 года исследователь безопасности под ником @hyprdude опубликовал подробный отчёт об уязвимости CVE-2024-20017, обнаруженной в сетевом демоне wappd. Этот демон используется в SDK от MediaTek и драйверах SoftAP для чипсетов, поддерживающих Wi-Fi 6, и часто встречается в таких устройствах, как роутеры Ubiquiti, Xiaomi и Netgear.

Уязвимость представляет собой переполнение буфера, вызванное некорректной обработкой данных, поступающих из сетевых пакетов. Эксплуатация этой ошибки позволяет злоумышленнику выполнять произвольный код на уязвимых устройствах, используя разные методы атаки. В отчёте @hyprdude описаны четыре подхода к эксплуатации этой уязвимости.

Метод 1. Захват RIP и выполнение ROP

Первый метод эксплуатации основан на простом захвате указателя возврата (RIP) с использованием ROP-цепочки. Этот метод наиболее эффективен на системах, где не применяются современные механизмы защиты, такие как ASLR (рандомизация адресного пространства) и канарейки стека (Stack Canary).

Суть метода заключается в переполнении стека до момента, когда можно перезаписать адрес возврата функции в стеке на адрес, указывающий на полезную нагрузку. В данном случае используется ROP-цепочка, которая вызывает функцию «system()» с заранее подготовленной командой для выполнения на устройстве. Это позволяет злоумышленнику получить полный контроль над устройством. Данный метод является наиболее простым, но уже устарел из-за широкого распространения защитных технологий.

Метод 2. Произвольная запись через порчу указателя

Второй метод основан на более сложной концепции и требует наличия защитных механизмов, таких как ASLR, канарейки стека и частичная защита RELRO. В этом случае злоумышленник использует возможность переполнения стека для порчи указателей (Pointer Corruption), что позволяет ему контролировать, куда будут записаны данные в памяти.

Используя этот метод, хакер может перезаписать таблицу GOT (Global Offset Table), которая содержит адреса функций, используемых программой. Подменяя адреса в таблице GOT, злоумышленник может перенаправить выполнение программы на свой код, что позволяет ему выполнить произвольные команды на устройстве. Этот метод сложнее в реализации, но значительно эффективнее на защищённых системах.

Метод 3. Возвращение к перезаписи адреса возврата и использование ROP на системах с полной защитой RELRO

Третий метод ещё более сложен в реализации, поскольку система использует полную защиту RELRO, что делает невозможным изменение таблицы GOT. Здесь злоумышленник использует комбинацию методов: сначала он добивается произвольной записи, а затем создаёт сложную ROP-цепочку, которая позволяет обойти защиту и выполнить нужную команду.

В этой ROP-цепочке используется несколько последовательных команд, которые манипулируют регистрами и стеком, чтобы обойти защитные механизмы системы. В конце выполнения цепочки система вызывает функцию «system()», передавая ей нужную команду. Этот метод особенно сложен в реализации, так как требует глубокого понимания архитектуры и защиты операционной системы.

Метод 4. Эксплуатация на реальном устройстве с архитектурой ARM64

Четвёртый метод был разработан специально для эксплуатации уязвимости на реальном устройстве — маршрутизаторе Netgear WAX206 с архитектурой ARM64. Это устройство использует все современные методы защиты, включая ASLR, NX, полную защиту RELRO и канарейки стека. Однако, из-за особенностей архитектуры ARM64 и методов оптимизации кода, злоумышленнику удалось найти способ обхода защиты. Он использует JOP (Jump Oriented Programming) вместо ROP для перенаправления выполнения программы.

Использованный метод включает несколько этапов: сначала злоумышленник получает возможность записывать данные в произвольные места памяти, затем он перезаписывает возвращаемый адрес и другие критические структуры в памяти, чтобы подготовить выполнение команды «system()». Эта техника наглядно демонстрирует, насколько сложной может быть эксплуатация уязвимостей на реальных устройствах, особенно с учётом особенностей архитектуры ARM64.

Бонус. Использование уязвимости ядра через вызовы IOCTL

В завершение отчёта автор представил ещё один интересный метод, который позволяет использовать эксплойт для атаки на уязвимость в ядре операционной системы. Используя цепочку JOP, злоумышленник может выполнить произвольные вызовы IOCTL, что позволяет получить доступ к критическим функциям ядра и расширить контроль над устройством. Этот метод сложен в реализации, но его использование показывает, насколько мощным может быть один эксплойт, если он нацелен на разные уровни системы.

Заключение

Этот подробный анализ уязвимости CVE-2024-20017 подчёркивает важность использования многоуровневой защиты в современных системах. Один и тот же баг может быть использован для атаки разными способами, и каждый из этих методов требует глубоких знаний и творческого подхода к разработке эксплойтов.

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

Мы нашли признаки жизни...в вашем смартфоне!

Наш канал — питательная среда для вашего интеллекта

Эволюционируйте вместе с нами — подпишитесь!