GBATempで、GaryOderNichts氏がNintendo Wii Uのbluetoothの脆弱性を利用しIOSUカーネルアクセスを可能にするexploit bluubombをリリースしていました。
bluubombはWii UがBluetoothでエミュレートされたWiiリモコンとペアリングさせることでIOSUコードの実行ができるというもので、通常エントリーポイントとして利用するブラウザなどは一切使用しません。ソフトウェア的にbrickしたWii Uにbluubombは有効だろうとしています。
Nintendo Switchの12.0.2でこっそり修正されたbluetoothのHIDデータパケットでのスタックバッファオーバーフローというのは、この脆弱性のことだったようです。今回この脆弱性を利用したのはSwitchではなくWii Uです。
[必要なもの]
Wiiリモコンとペアリング可能なWii U
Bluetoothに対応したPC
Linux標準のBluetoothプロトコルスタックBlueZのカスタムビルドが動作するLinux(Debian 10推奨。Ubuntu 20.04ではクラッシュするため)
[使い方]
1. 必要なものをインストールするため、以下を実行する
sudo apt install build-essential libbluetooth-dev libglib2.0-dev libdbus-1-dev
2. PCで実行するWiiリモコンエミュレータhttps://github.com/rnconrad/WiimoteEmulatorをクローンする
3. source ./build-custom.sh
を実行し、カスタムBlueZを実行する
4. udo systemctl disable --now bluetooth
で既存のBluetoothデバイスを停止する
5. sudo ./bluez-4.101/dist/sbin/bluetoothd -d -n
でカスタムビルドのbluetoothdを実行する
6. リリースページからbluubombのバイナリをダウンロードする
7. Wii Uの電源を投入しsyncボタンを押す
8.sudo ./bluubomb arm_kernel.bin
を実行し、ペアリングプロセスが完了するまで待つ(1分程度かかる)
9. ペアリングが完了するとBluetoothのアドレス([bdaddr])が表示されるので、PC側からsudo ./bluubomb arm_kernel.bin [bdaddr]
のコマンドを実行し、ペアリングプロセスをスキップする
bluubombにはいくつか目的ごとにカーネルバイナリが用意されています。
arm_kernel_loadfile
次のアプリケーション起動時にSDカードのルートにあるlaunch.rpxを起動する
arm_kernel_fw_launcher
SDカードのルートにあるfw.imgを次回のOS再起動時に起動する
arm_kernel_region_free
リージョン制限を一時的に解除するIOSUパッチを適用する
今後様々な目的のカーネルバイナリがリリースされるかも知れません。
Switchでも12.0.1までであればJoy-Conエミュレータが用意されれば面白いことができるのかも知れません。
現時点での最新版はインテルのBluetoothチップでWii Uとのペアリングをサポートしたbluubomb v2です。