Cisco Aabo Oluwadi
Уязвимость может быть эксплуатирована для выполнения кода в ситуации, когда атакующий может организовать формирование отрицательного значения переменной, через которую передаётся размер копируемых данных (например, уход в минус будет при передаче более 2 ГБ данных, но в процессе атаки для выхода за пределы буфера нужно передать как минимум 4ГБ). Функция memcpy() активно применяется в приложениях, а процессоры ARMv7 распространены в автомобильных системах, мобильных, промышленных, потребительских, коммуникационных и встраиваемых устройствах, которые потенциально могут стать объектами атак с использованием Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi и других внешних источников данных (например, могут быть атакованы доступные по сети сервисы и приложения, принимающие входные данные без ограничения размера).
В качестве примера приводится создание рабочего эксплоита для атаки на встроенный в автомобильные информационные системы http-сервер, доступный через автомобильную Wi-Fi сеть. Посторонний атакующий может эксплуатировать уязвимость в memcpy в данном сервере через передачу GET-запроса очень большого размера и получить root-доступ к системе.
На 32-разрядных системах x86 проблема не проявляется, так как реализация memcpy для данной архитектуры корректно интерпретирует переменную с размером как беззнаковое целое значение с типом size_t (в написанной на ассемблере
Исправление сводится к замене использования ассемблерных инструкций, оперирующих знаковыми операндами (bge и blt), на беззнаковые аналоги (blo и bhs).
Проблема пока не устранена в
orisun: opennet.ru