Уязвимость в Bluetooth-стеках Linux, macOS, Android и iOS, допускающая подстановку нажатий клавиш

Марк Ньюлин (Marc Newlin), семь лет назад выявивший уязвимость MouseJack, раскрыл сведения о похожей уязвимости (CVE-2023-45866), затрагивающей Bluetooth-стеки Android, Linux, macOS и iOS, и позволяющей осуществить подстановку нажатий клавиш через симуляцию активности устройства ввода, подключённого через Bluetooth. Имея доступ к клавиатурному вводу атакующий может выполнить такие действия, как запуск команд в системе, установка приложений и перенаправление сообщений.

Уязвимость вызвана тем, что хостовые HID (Human Interface Device) драйверы для Bluetooth-устройств имеют режим, позволяющий удалённому периферийному устройству создавать и устанавливать шифрованные соединения без аутентификации. Среди прочего, подключившиеся таким образом устройства могут передавать клавиатурные сообщения и HID-стек их обработает, что позволяет организовать атаку по удалённой подстановке HID-сообщений, проводимую без участия пользователя. Атака может быть проведения при нахождении злоумышленника на расстоянии до 100 метров от жертвы.

Механизм сопряжения устройств без аутентификации определён в спецификации Bluetooth и в зависимости от настроек Bluetooth-стека позволяет подключить устройство без подтверждения от пользователя. В Linux при использовании Bluetooth-стека BlueZ для скрытого сопряжения Bluetooth-адаптер должен находиться в режиме обнаружения и подключения. В Android достаточно просто включения поддержки Bluetooth. В iOS и macOS для совершения атаки должен быть включён Bluetooth и подсоединена беспроводная клавиатура.

Возможность подстановки ввода продемонстрирована в Ubuntu 18.04, 20.04, 22.04 и 23.10 с Bluetooth-стеком на базе пакета Bluez. ChromeOS уязвимости не подвержен, так как настройки Bluetooth-стека в нём не допускают соединения без аутентификации. В Android уязвимость затрагивает устройства с версиями платформы от 4.2.2 до 14. В macOS уязвимость продемонстрирована в MacBook Pro 2022 с CPU Apple M2 и macOS 13.3.3 и MacBook Air 2017 с CPU Intel и macOS 12.6.7. В iOS уязвимость продемонстрирована в iPhone SE с iOS 16.6. Включение режима Lockdown не защищает от атаки на macOS и iOS.

В Linux уязвимость устранена в кодовой базе Bluez через выставление настройки “ClassicBondedOnly” в значение “true”, включающее безопасный режим, допускающий установку соединений только после сопряжения. Ранее было выставлено значение “false”, которое ценой снижения безопасности решало проблемы с совместимостью с некоторыми устройствами ввода.

В Bluetooth-стеке Fluoride, используемом в последних выпусках Android, уязвимость устранена через обязательное применение аутентификации для всех шифрованных соединений. Исправления для Android сформированы только для веток 11-14. Для устройств Pixel уязвимость устранена в декабрьском обновлении прошивки. Для выпусков Android с 4.2.2 по 10 уязвимость остаётся неисправленной.

Release. Ссылка here.