Разработчики мобильной операционной системы AuroraOS (форк операционной системы Sailfish, разработанный компанией Open Mobile Platform) поделился исправлением уязвимости что они обнаружили в memcpy. Устранение критической уязвимости (CVE-2020-6096) в Glibc, который проявляется только на платформе ARMv7.
Информация об уязвимости появилась в мае, но до последних нескольких дней исправления были недоступны, несмотря на то, что уязвимости был присвоен высокий уровень опасности и есть рабочий прототип эксплойта что позволяет организовать выполнение кода.
Эксплойт подготовлен действует во время обработки в функциях memcpy () и memmove () для определенных форматированных данных.
Важность Glibc заключается в том, что эта библиотека определяет системные вызовы и другие базовые функции в дополнение к тому, что она используется почти всеми программами.
О проблеме
Проявленная уязвимость в реализации memcpy () и memmove () на ассемблере для ARMv7 Причина - некорректная обработка отрицательных значений параметра, определяющего размер области.
Начались проблемы с разработкой патча когда SUSE и Red Hat объявили, что их платформы не пострадали из-за проблемы, поскольку они не компилировались для 7-битных систем ARMv32 и не участвовали в создании патча.
Разработчики многих встраиваемых дистрибутивов явно доверяли команде Glibc, а также не принимали активного участия в подготовке патча.
Разработки
Huawei предложила вариант за патч почти сразу заблокировать проблему, который пытался заменить инструкции ассемблера, которые работают со знаковыми операндами (bge и blt), на беззнаковые аналоги (blo и bhs).
Сопровождающие Glibc разработали набор тестов для проверки различных условий возникновения ошибки, после что оказалось что патч Huawei не подходит и он не обрабатывает все возможные комбинации входных данных.
При условии AuroraOS имеет 32-битную сборку для ARM., Его разработчики решили закрыть уязвимость самостоятельно и предложить решение сообществу.
Сложность заключалась в том, что нужно было написать эффективную реализацию. ассемблер функции и рассмотрим несколько вариантов входных аргументов.
Реализация переписана с использованием неподписанных инструкций.. Патч оказался небольшим, но основная проблема заключалась в поддержании скорости выполнения и устранении снижения производительности функций memcpy и memmove при сохранении совместимости со всеми комбинациями входных значений.
В начале июня были приготовлены два раствора, прохождение тестовой среды обслуживания Glibc и внутреннего набора тестов Aurora. 3 июня был выбран и отправлен один из вариантов. в список рассылки Glibc.
Через неделю был предложен другой аналогичный подход, который устранил проблему в многоархивной реализации, которую Huawei ранее пыталась исправить. Месяц ушло на тестирование и легализацию ввиду важности патча.
8 июля исправления приняты в основной ветке грядущего выпуска glibc 2.32. В состав приложения входят два патча:
- Первое приложение для установления памяти Multiarch для ARMv7
- Вторая для распространенной ассемблерной реализации memcpy () и memmove () для ARM.
Проблема затрагивает миллионы устройств ARMv7 Linux и без надлежащего обновления владельцы рискуют подключить их к сети (службы и приложения, доступные в сети, которые принимают ввод без ограничений по размеру, могут быть атакованы).
Например, подготовленный эксплойт исследователями, которые Обнаруженная уязвимость показывает, как атаковать http-сервер интегрируется в информационную систему автомобиля, передавая очень большой запрос GET и получая root-доступ к системе.
Пакетные решения для Debian и Ubuntu еще не выпущены y уязвимость остается неисправленной в течение почти двух месяцев с момента публичного раскрытия информации и пяти месяцев с момента уведомления разработчиков Glibc.