
Blueborne CVE-2017-0781 Vulnérabilité de dépassement de tas Android
Ceci est une implémentation de la vulnérabilité de dépassement de tas Android CVE-2017-0781 décrite dans le livre blanc Blueborne publié par Armis. Pour en savoir plus : https://www.armis.com/blueborne/
Dans l'état actuel, ce code ne fait que démontrer le dépassement et la capacité de faire planter le service Bluetooth. Encore une fois, il ne s'agit pas d'une exécution de code à distance complètement développée, mais elle pourrait l'être.
Obtenez pwntools.
apt-get update
apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
pip install --upgrade pip
pip install --upgrade pwntools
Obtenez pybluez.
apt-get install bluetooth libbluetooth-dev
pip install pybluez==0.22
J'ai utilisé les outils hciconfig et btmgmt pour cela, tous deux inclus dans le paquet bluez. Si votre module Bluetooth se verrouille, rfkill peut vous aider.
Exécutez btmgmt.
La commande info affichera les indices de vos périphériques.
Saisir select 0 rendra le premier contrôleur Bluetooth actif. Un raccourci consiste à lancer l'outil avec btmgmt --index 0.
Assurez-vous de pouvoir découvrir des périphériques avec la commande find. L'écran de votre Android doit être allumé et la vue des paramètres Bluetooth doit être ouverte pour qu'il soit détectable. Notez que la détectabilité n'est pas un prérequis pour exploiter cette vulnérabilité, comme détaillé dans le livre blanc publié par Armis.
Pour que l'exploit fonctionne sans appairage manuel, vous devez définir les capacités IO de votre hôte avec io-cap 0x03 dans l'outil btmgmt.
Une fois ceci défini, exécutez le code avec python CVE-2017-0781.py TARGET=XX:XX:XX:XX:XX:XX et le service Bluetooth de votre appareil Android devrait planter. Cela peut nécessiter plusieurs tentatives. Actuellement, le code envoie 30 de ces paquets invalides pour corrompre suffisamment de mémoire et faire planter le processus.
Happy hacking ;)
Assurez-vous de voir votre périphérique Bluetooth sur l'hôte avec la commande hciconfig.
user-pc user # hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: XX:XX:XX:XX:XX:XX ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:580 acl:0 sco:0 events:31 errors:0
TX bytes:368 acl:0 sco:0 commands:30 errors:0
S'il n'est pas UP mais plutôt DOWN comme ici, corrigez-le avec hciconfig <intf> up
user-pc user # hciconfig hci0 up
Can't init device hci0: Operation not possible due to RF-kill (132)
Si vous obtenez des messages concernant rf-kill, essayez la commande rfkill list.
user-pc user # rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: asus-wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
3: asus-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
Le déblocage peut se faire avec rfkill unblock <id>.
Si vous constatez que votre appareil demande toujours un code d'appairage après avoir défini les capacités IO sur l'hôte, alors cette méthode n'est probablement pas possible sur votre appareil actuellement.