
Vulnerabilidad de desbordamiento de montón en Android Blueborne CVE-2017-0781
Esta es una implementación de la vulnerabilidad de desbordamiento de montículo (heap overflow) en Android CVE-2017-0781, descrita en el libro blanco de Blueborne publicado por Armis. Lectura adicional: https://www.armis.com/blueborne/
En el estado actual, este código solo demuestra el desbordamiento y la capacidad de provocar un fallo (crash) en el servicio de Bluetooth. De nuevo, no se trata de una ejecución remota de código completamente desarrollada, pero podría llegar a serlo.
Consigue 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
Consigue pybluez.
apt-get install bluetooth libbluetooth-dev
pip install pybluez==0.22
He usado las herramientas hciconfig y btmgmt para esto; ambas están incluidas en el paquete bluez. Si tu módulo de Bluetooth se bloquea, rfkill puede ayudar.
Ejecuta btmgmt.
El comando info mostrará los índices de tus dispositivos.
Introducir select 0 activará el primer controlador de Bluetooth. Un atajo para esto es lanzar la herramienta con btmgmt --index 0.
Asegúrate de poder descubrir dispositivos con el comando find. La pantalla de tu Android debe estar encendida y la vista de ajustes de Bluetooth debe estar abierta para que sea descubrible. Ten en cuenta que la capacidad de descubrimiento no es un requisito previo para explotar esta vulnerabilidad, tal como se detalla en el libro blanco publicado por Armis.
Para que el exploit funcione sin emparejamiento manual, debes establecer las capacidades de E/S de tu equipo con io-cap 0x03 en la herramienta btmgmt.
Con esto configurado, ejecuta el código con python CVE-2017-0781.py TARGET=XX:XX:XX:XX:XX:XX y el servicio de Bluetooth de tu dispositivo Android debería fallar. Puede que necesites varios intentos. Actualmente el código envía 30 de estos paquetes inválidos para corromper suficiente memoria y provocar que el proceso falle.
Feliz hacking ;)
Asegúrate de ver tu dispositivo Bluetooth en el equipo con el comando 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
Si no está UP sino DOWN como se muestra aquí, arréglalo con hciconfig <intf> up
user-pc user # hciconfig hci0 up
Can't init device hci0: Operation not possible due to RF-kill (132)
Si recibes mensajes sobre rf-kill, prueba el comando 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
Puedes desbloquearlo con rfkill unblock <id>.
Si ves que tu dispositivo todavía pide un código de emparejamiento después de establecer las capacidades de E/S en el equipo, entonces probablemente este método no sea posible actualmente en tu dispositivo.