В USB-стеке ядра Linux обнаружены серьезные уязвимости

Уязвимости могут быть проэксплуатированы злоумышленником для выполнения произвольного кода и получения контроля над устройством.

В USB-стеке ядра Linux обнаружен
ряд серьезных уязвимостей, которые могут быть проэксплуатированы злоумышленниками для выполнения произвольного кода и получения контроля над пользовательским устройством.

Большинство уязвимостей было обнаружено исследователем безопасности из Google Андреем Коноваловым. Эксперт уведомил сообщество Linux о 14 уязвимостях, обнаруженных в USB-подсистемах ядра Linux. По словам Коновалова, каждая из них может быть проэксплуатирована локальным злоумышленником с помощью специального вредоносного USB-устройства.

В общей сложности исследователю удалось обнаружить
79 проблем, связанных с USB в Linux. Большинство из них приводят к отказу в обслуживании (Denial of Service, DoS), заставляя ОС зависать или перезагружаться, однако некоторые позволяют злоумышленнику повысить привилегии на целевой системе и выполнить вредоносный код. Все проблемы были обнаружены с помощью фаззинг-инструмента syzkaller, разработанного Google для поиска уязвимостей.

Ранее в этом году исследователи безопасности из Лондонского университета представили инструмент для поиска проблем в USB-стеке Linux под названием POTUS. Инструмент находит уязвимости, устанавливая виртуальную машину, универсальное USB-устройство и тестируя стек с помощью таких методов, как внесение неисправностей (fault injection), фаззинг (fuzzing) и символьное выполнение кода (symbolic execution). С помощью POTUS исследователи обнаружили
две уязвимости в ядре Linux. Первая уязвимость CVE-2016-5400 приводила к утечке памяти в драйвере USB-устройства, использующегося для связи с программным обеспечением AirSpy Software Defined Radio (SDR). Вторая уязвимость (не получила идентификатор CVE) существовала в драйвере Lego USB Tower в ядре Linux с 2003 года.

Фаззинг (fuzzing) – техника тестирования программного обеспечения, часто автоматическая или полуавтоматическая, заключающая в передаче приложению на вход неправильных, неожиданных или случайных данных.

Внесение неисправностей – метод, используемый в тестировании программного обеспечения. Предполагает искусственное внесение разного рода неисправностей для тестирования отказоустойчивости и, в частности, обработки исключений.

Символьное выполнение (symbolic execution) – техника, позволяющая проводить моделирование выполнения программы, при котором часть входных переменных представляется в символьном виде.

В USB-стеке ядра Linux обнаружены серьезные уязвимости
Подписывайтесь на канал “SecurityLab” в Telegram, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.