Уязвимость проявлялась в реализации memcpy() и memmove() на языке ассемблер для ARMv7 и была вызвана некорректной обработкой отрицательных значений параметра, определяющего размер копируемой области. Проблемы с разработкой исправления начались с того, что компании SUSE и Red Hat объявили, что их платформы проблеме не подвержены, так как они не формируют сборки для 32-разрядных систем ARMv7, и не стали участвовать в создании исправления. Разработчики встраиваемых дистрибутивов, видимо, положились на команду Glibc, и не проявили активного участия в подготовке исправления.
Вариант патча для блокирования проблемы почти сразу предложила компания Huawei, которая попыталась заменить ассемблерные инструкции, оперирующих знаковыми операндами (bge и blt), на беззнаковые аналоги (blo и bhs). Мэйнтенеры Glibc разработали набор тестов для проверки разных условий возникновения ошибки, после чего выяснилось, что патч от Huawei не подходит.
Так как ОС Аврора имеет 32-битную сборку для ARM её разработчики решили закрывать уязвимость своими силами и предложить решение сообществу. Сложность заключалась в том, что нужно было написать эффективную ассемблерную реализацию функции и учесть при этом различные варианты входных аргументов. Реализация была переписана с использованием беззнаковых инструкций. Патч получился небольшой, но основная проблема состояла в сохранении скорости выполнения и исключении снижения производительности функций memcpy и memmove, сохраняя при этом совместимость со всеми комбинациями входных значений.
В начале июня было подготовлена два варианта исправления, проходящие тестовый фреймворк мейтенеров Glibc и внутренний тестовый набор Аврора. 3 июня был выбран один из вариантов и отправлен в список рассылки Glibc. Через неделю компания Huawei предприняла вторую попытку и предложила второй вариант своего патча, похожий по реализации на патч от разработчиков Авроры. Месяц заняло тестирование и юридическое оформление в виду важности патча. 8 июля исправления были приняты в основную ветку готовящегося релиза glibc 2.32. Реализация включает два патча — первый для реализации memcpy для ARMv7, а второй для общей ассемблерной реализации memcpy() и memmove() для ARM.
Проблема затрагивает миллионы ARMv7-устройств с Linux и без соответствующего обновления владельцы рискуют, подключая их к сети (атакованы могут быть доступные по сети сервисы и приложения, принимающие входные данные без ограничения размера). Например, в эксплоите, подготовленном выявившими уязвимость исследователями, показано как совершить атаку на встроенный в автомобильную информационную систему http-сервер через передачу GET-запроса очень большого размера и получить root-доступ к системе.
Источник: http://www.opennet.ru/opennews/art.shtml?num=53371