
Инструмент оценки безопасности Bluetooth для беспроводных наушников, затронутых цепочкой уязвимостей Airoha SDK (CVE-2025-20700/20701/20702), не требующий донгла и прав root.
Версия 1.0.0
Инструмент оценки безопасности Bluetooth для беспроводных наушников, подверженных цепочке уязвимостей SDK Airoha (CVE-2025-20700 / CVE-2025-20701 / CVE-2025-20702). Сканирует ближайшие устройства, идентифицирует известные уязвимые чипсеты на базе Airoha и проверяет неаутентифицированный доступ через GATT и доступность протокола RACE — полностью через стек Bluetooth ОС (BlueZ) с помощью bleak. Внешний Bluetooth-адаптер не требуется, root-доступ не нужен. Результаты выводятся на простом языке вместе с техническими деталями, чтобы вы могли действовать на их основе без глубоких знаний Bluetooth.
Этот инструмент предназначен для оценки устройств, которые вам принадлежат или на тестирование которых вы получили явное разрешение. Зондирование GATT и RACE — это активные операции: они подключаются к целевому устройству и отправляют ему команды. Не запускайте --gatt, --race, --firmware, --bd-address, --assess, --baseline, --check-drift или --memory-read против устройства, которое не является вашим или на которое вы не получили разрешение на тестирование. --scan является пассивным и только прослушивает рекламные пакеты, которые уже публично транслируются, поэтому его безопасно запускать против любых устройств в зоне действия.
--memory-read идет на шаг дальше, чем другие активные зонды: он извлекает одну реальную, доступную только для чтения страницу (256 байт) фактического содержимого флэш-памяти устройства по фиксированному адресу, как окончательное подтверждение CVE-2025-20702, когда зонд --race, проверяющий только доступность, не получает ответа. Он доступен только для чтения (чтение флэш-памяти не несет риска износа или повреждения, в отличие от команд записи/стирания/FOTA, которые этот инструмент никогда не отправляет), является опциональным и требует собственного отдельного подтверждения помимо стандартного запроса на владение, в котором точно описано, что он делает, прежде чем что-либо запускать.
Зондирование произвольного nearby-устройства — это не только вопрос политики; оно может иметь реальные побочные эффекты. --gatt пытается выполнить чтение или подписку на уведомления для каждой найденной характеристики, и некоторые потребительские устройства предоставляют сервисы типа provisioning (например, сервис Google Fast Pair), которые реагируют на это запуском реального процесса сопряжения на целевом устройстве, независимо от того, что явно запрашивает этот инструмент. Характеристика, требующая шифрования, может вызвать то же самое даже на вашем собственном устройстве, поскольку BlueZ может незаметно направить этот запрос аутентификации любому агенту, зарегистрированному вашим рабочим столом (например, запросу на сопряжение от KDE) — поэтому каждая активная команда также регистрирует свой собственный временный агент BlueZ, который автоматически отклоняет любой такой запрос на время зонда, так что никакой запрос на сопряжение вообще не может появиться. Каждая активная команда также по-прежнему запрашивает подтверждение, что целевой адрес принадлежит вам, прежде чем что-либо делать в радиоэфире; передайте --yes, чтобы пропустить запрос для скриптового использования, после того как вы уже подтвердили, что это ваше устройство:
buds_audit.py --assess --target AA:BB:CC:DD:EE:FF --yes
--watch является пассивным, как --scan — он только слушает уже транслируемые рекламные пакеты и никогда не подключается ни к чему, поэтому не запрашивает подтверждение.
python3 -m venv venv
venv/bin/pip install -r requirements.txt
Требуется Python 3.10+ (разрабатывалось под 3.14) и Linux-система с BlueZ и включенным Bluetooth-адаптером.
Только Linux, и не обязательно каждая Linux-система:
bleak есть бэкенд для Windows, но этот инструмент полагается не только на bleak — обнаружение Bluetooth Classic (core/scanner.py) и проверка состояния сопряжения (core/gatt.py) напрямую вызывают bluetoothctl, инструмент командной строки, существующий только в BlueZ, которого нет в Windows. Эти пути кода просто завершатся ошибкой "command not found".bluetoothctl в PATH, а не просто любое ядро Linux. В большинстве дистрибутивов для настольных ПК это есть; минимальный образ или образ сервера без установленного пакета bluez не будет иметь этого из коробки. Проверено без root на BlueZ 5.86 — другие версии должны работать так же, поскольку bleak нацелен на стандартный D-Bus API BlueZ, но это независимо не перепроверялось.usbipd-win, который перенаправляет только USB-адаптеры. Встроенный Bluetooth большинства ноутбуков подключен по не-USB шине (SDIO/PCIe, вместе с Wi-Fi), которую usbipd-win обычно не может перенаправить — поэтому это полностью зависит от конкретного оборудования.Вам не нужна собственная Linux-машина — вам просто нужен Linux с реальным доступом к Bluetooth-радио. Два практических способа это получить:
В любом случае правило одинаково: сам инструмент не меняется — ему просто нужен Linux с Bluetooth-адаптером, до которого BlueZ действительно может добраться.
Многие TWS-наушники прекращают рекламироваться (и разрывают любое активное соединение) после периода бездействия для экономии энергии, а некоторые полностью выключаются сами. Если сканирование не может найти устройство, которое оно нашло минуту назад, или зонд не срабатывает на полпути, это обычно означает, что наушники перешли в режим ожидания, а не ошибка — достаньте их из чехла или снова нажмите кнопку сопряжения и повторите попытку.