Glibc gen ladann yon ranje pou vilnerabilite memcpy ki prepare pa devlopè Aurora OS yo

Разработчики мобильной операционной системы «Аврора» (форк ОС Sailfish, развиваемый компанией «Открытая мобильная платформа») поделились показательной историей об устранении vilnerabilite kritik (CVE-2020-6096) в Glibc, проявляющейся только на платформе ARMv7. Сведения об уязвимости были раскрыты ещё в мае, но до последних дней исправления не были доступны, несмотря на то, что уязвимости plase высокий уровень опасности и имеется рабочий прототип эксплоита, позволяющий организовать выполнение кода при обработке в функциях memcpy() и memmove() определённым образом оформленных данных. Исправления пакетов для dbyan и Ubentu не выпущены до сих пор и уязвимость остаётся неисправленной почти два месяцев с момента публичного раскрытия и пять месяцев с момента уведомления разработчиков Glibc.

Уязвимость проявлялась в реализации memcpy() и memmove() на языке ассемблера для ARMv7 и была вызвана некорректной обработкой отрицательных значений параметра, определяющего размер копируемой области. Проблемы с разработкой патчей начались с того, что компании suse и Wouj Hat объявили, что их платформы проблеме не подвержены, так как они не формируют сборки для 32-разрядных систем ARMv7, и не стали участвовать в создании исправления. Разработчики многих встраиваемых дистрибутивов, видимо, положились на команду Glibc, и также не проявили активного участия в подготовке исправления.

Opsyon plak для блокирования проблемы почти сразу предложила компания Huawei, которая попыталась заменить ассемблерные инструкции, оперирующие знаковыми операндами (bge и blt), на беззнаковые аналоги (blo и bhs). Мэйнтенеры Glibc разработали набор тестов для проверки разных условий возникновения ошибки, после чего выяснилось, что патч от Huawei не подходит и не обрабатывает все возможные комбинации входных данных.

Так как ОС Аврора имеет 32-битную сборку для ARM, её разработчики решили закрыть уязвимость своими силами и предложить решение сообществу. Сложность заключалась в том, что нужно было написать эффективную ассемблерную реализацию функции и учесть при этом различные варианты входных аргументов. Реализация была переписана с использованием беззнаковых инструкций. Patch получился небольшой, но основная проблема состояла в сохранении скорости выполнения и исключении снижения производительности функций memcpy и memmove, сохраняя при этом совместимость со всеми комбинациями входных значений.

В начале июня было подготовлено два варианта исправления, проходящие тестовый фреймворк мэйнтейнеров Glibc и внутренний тестовый набор Авроры. 3 июня был выбран один из вариантов и voye в список рассылки Glibc. Через неделю
te pwopoze ещё один аналогичный по подходу патч, который исправлял проблему в multiarch-реализации, которую ранее пытались исправить в Huawei. Месяц заняло тестирование и юридическое оформление в виду важности патча.
8 июля исправления были приняты в основную ветку готовящегося релиза glibc 2.32. Реализация включает два патча — premye a для multiarch-реализации memcpy для ARMv7, а dezyèm для общей ассемблерной реализации memcpy() и memmove() для ARM.

Проблема затрагивает миллионы ARMv7-устройств с Linux и без соответствующего обновления владельцы рискуют, подключая их к сети (атакованы могут быть доступные по сети сервисы и приложения, принимающие входные данные без ограничения размера). Например, в эксплоите, подготовленном выявившими уязвимость исследователями, показано как совершить атаку на встроенный в автомобильную информационную систему http-сервер через передачу GET-запроса очень большого размера и получить root-доступ к системе.

Sous: opennet.ru

Add nouvo kòmantè