Android、Linux、macOS、iOSのBluetoothキー入力注入の脆弱性
(github.com/skysafe)- CVE-2023-45866は、複数のOSのBluetoothスタックにおいて、ユーザー確認なしに偽のキーボードを接続し、キー入力を注入できる認証バイパス脆弱性
- 近くにいる攻撃者は、特殊な機器なしにLinuxコンピューターと一般的なBluetoothアダプターだけで、アプリのインストール、任意コマンドの実行、メッセージ送信といった操作を試みられる
- 脆弱となる条件はプラットフォームごとに異なり、AndroidではBluetoothが有効かどうかが鍵で、Linux/BlueZではdiscoverable/connectable状態、iOSとmacOSではMagic Keyboardのペアリング有無が影響する
- Android 11〜14は2023-12-05セキュリティパッチレベルで緩和されるが、Android 4.2.2〜10には修正がなく、BlueZでは2020年の修正がデフォルトで無効化されていた
- パスワードや生体認証が必要な操作はキー入力注入だけでは実行できないが、未パッチのデバイスは近距離Bluetooth攻撃にさらされる可能性がある
認証なしのBluetoothキー入力注入
- CVE-2023-45866は、Android、Linux、macOS、iOSで認証なしのBluetoothキーストロークインジェクションを許す脆弱性
- 複数のBluetoothスタックで、攻撃者がユーザー確認なしにdiscoverable hostへ接続し、キー入力を注入できる認証バイパスが可能
- 近くにいる攻撃者は、脆弱なデバイスに未認証のBluetooth接続を確立し、次の操作をキー入力として実行できる
- アプリのインストール
- 任意コマンドの実行
- メッセージ送信
- 攻撃に特殊なハードウェアは不要で、Linuxコンピューターと一般的なBluetoothアダプターで実行可能
- エクスプロイトの詳細全体とPoCスクリプトは、ShmooConの週である1月12〜14日に公開予定
プラットフォーム別の攻撃条件
- 脆弱性は、Bluetoothホストのステートマシンを欺き、ユーザー確認なしに偽のキーボードとペアリングさせる仕組みで動作する
- 基盤となる認証なしのペアリングメカニズムはBluetooth仕様に存在し、実装ごとのバグがこれを攻撃面として露出させている
- 未パッチのデバイスで必要となる条件はOSごとに異なる
- Android: Bluetoothが有効なら脆弱
- Linux/BlueZ: Bluetoothがdiscoverable/connectable状態である必要がある
- iOSおよびmacOS: Bluetoothが有効で、Magic Keyboardがスマートフォンまたはコンピューターにペアリングされている場合に脆弱
- 攻撃者が対象のスマートフォンやコンピューターとペアリングした後は、被害者の権限でキー入力を注入できる
- パスワードや生体認証が必要な操作は、キー入力注入だけでは実行できない
MouseJack以後に明らかになった古い脆弱性
- 2016年に公開されたMouseJack研究は、Bluetoothではなく周辺機器のカスタム無線プロトコルを対象にしていた
- 今回の研究は、Apple Magic Keyboardを対象にBluetoothとApple環境を調査する過程で始まった
- macOSとiOSでは、認証なしのBluetoothキーストロークインジェクションが見つかり、両プラットフォームともLockdown Modeでも悪用可能だった
- その後LinuxとAndroidでも類似の脆弱性が確認され、単なる実装バグというよりプロトコルの欠陥に近いように見え、Bluetooth HID仕様を確認した結果、その両方に当てはまるものだった
- 一部の脆弱性はMouseJackより古く、Android 4.2.2までキーストロークインジェクションを再現できた
Androidへの影響とパッチ状況
- テストで脆弱と確認されたAndroidデバイスとバージョンは以下の通り
- Pixel 7, Android 14
- Pixel 6, Android 13
- Pixel 4a (5G), Android 13
- Pixel 2, Android 11
- Pixel 2, Android 10
- Nexus 5, Android 6.0.1
- BLU DASH 3.5, Android 4.2.2
- 2023-12-05セキュリティパッチレベルはAndroid 11〜14の脆弱性を緩和する
- Android 4.2.2〜10には利用可能な修正がない
- 公開スケジュールは以下の通り
- 2023-08-05: Googleに脆弱性を報告
- 2023-12-06: 公開
- Googleは、Android 11〜14に影響する問題の修正が影響を受けるOEMに提供され、現在サポートされているすべてのPixelデバイスが12月のOTAアップデートで修正を受けると述べている
Linux/BlueZへの影響とパッチ
- テストで脆弱と確認されたUbuntuバージョンは18.04、20.04、22.04、23.10
- GoogleによるとChromeOSは脆弱ではなく、直接テストはしていないがBlueZ設定が脆弱性を緩和しているように見える
- Linuxの脆弱性は2020年にCVE-2020-0556として修正されたが、その修正はデフォルトでは無効化されていた
- ChromeOSは、この修正を有効化していることが知られている唯一のLinuxベースOS
- CVE-2023-45866に対するBlueZパッチは、2020年の修正をデフォルトで有効化する
- 関連するBlueZパッチ:
- Ubuntu関連情報:
- Debian関連情報:
- Fedora関連情報:
- 公開スケジュールは以下の通り
- 2023-08-10: Canonicalに脆弱性を報告
- 2023-09-25: Bluetooth SIGに脆弱性を報告
- 2023-10-02: CERT/CCにケースを開設
- 2023-12-06: 公開
macOSとiOSへの影響
- macOSでテストされ、脆弱と確認されたデバイスは以下の通り
- 2022 MacBook Pro, macOS 13.3.3, M2
- 2017 MacBook Air, macOS 12.6.7, Intel
- macOSのLockdown Modeは攻撃を防げない
- macOS Sonoma 14.2は脆弱性を修正する
- macOSの公開スケジュールは以下の通り
- 2023-08-01: Appleに脆弱性を報告
- 2023-12-06: 公開
- iOSでテストされ、脆弱と確認されたデバイスはiOS 16.6を実行するiPhone SE
- iOSのLockdown Modeも攻撃を防げない
- iOSの公開スケジュールは以下の通り
- 2023-08-04: Appleに脆弱性を報告
- 2023-12-06: 公開
1件のコメント
Hacker Newsのコメント
これを確認するために少し調べる必要がありましたが、安全に過ごすには、Androidでは使わないときにBluetoothをオフにしておくことをお勧めします。ただし、使っている間は脆弱です
私のPixelは2023-12-05のセキュリティアップデートを受け取り、この問題は修正されましたが、Pixel以外の端末についてはよく分かりません
Linuxでは、
/etc/bluetooth/input.confを開いてClassicBondedOnly=trueに設定すればよいです。私の場合は新しく追加する必要はなく、コメントアウトを解除するだけで済みました。次のbluetoothdバージョンではデフォルト値がtrueになる予定ですが、今すぐ自分で設定でき、その後Bluetoothサービスを再起動する必要がありますmacOSやiOSは該当する端末を持っていないので分かりません
Wi-Fiもコントロールセンターから完全にはオフにできない、穴だらけのチーズのような状態です
trueのようです$ rpm -q --changelog bluez | grep CVE-2023-45866 -C1* Thu Dec 07 2023 Peter Robinson - 5.70-4- Add mitigation for CVE-2023-45866Androidから乗り換えた後しばらくは頑張りましたが、結局諦めました
スマートフォンを使わないときは積極的にロックし、使っている最中にキー入力が送信されれば画面で見えるはずなので、Bluetoothをオンにしておくことがそこまでひどいことには見えません
GrapheneOSで修正されているなら、ついに移行するきっかけになるのですが、今のスマートフォンが問題なく動いているので、新しいスマートフォンを買う正当化が難しいです
Windowsがまったく言及されていないのが気になります。表面的には良いニュースに聞こえますが、なぜWindowsが実際に影響を受けないのかを知らないとリスクを判断できません
例えばWindowsのBluetoothスタックにBlueZの
ClassicBondedOnly=falseに相当する構造があるのか分かれば、強化したい環境でその値がtrueかどうか注視すべきだ、といった判断ができますあるいはスタックがまったく異なる動作をしていて、考慮すべき点もまったく違うかもしれません
PoCとデモが多い動画に期待していますが、Windowsはシェアも高く、戸惑うシステム管理者も多いでしょうから、情報があると助かります。「まだWindowsは攻撃していない」というのも有用な情報です
ただし、Flipper ZeroでBluetoothデバイスを作ると、Windowsクライアントが接続した瞬間にキーボードとして認識し、任意のPowerShellコマンドを実行させることができます。自分ではYouTubeを開いてRickRollするのにしか使ったことがなく、違法なことは試していません
今ではすべてのBluetoothをオフにしていますが、Linuxを壊さずにbluezを削除する方法は分かりません
ClassicBondedOnly=falseに相当すると言っていましたが、もしかして**ClassicBondedOnly=true**のことですか?業界がスマートフォンから物理オーディオ接続をなくし、無線へ押し進めた今、こういうニュースが出てきて本当に良かったです。よくやりました
[1] https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/pr...
この脆弱性は、Bluetoothホストのステートマシンをだまして、ユーザー確認なしに偽のキーボードとペアリングさせる仕組みで動作します。基盤となる認証なしペアリングのメカニズムはBluetooth仕様で定義されており、実装ごとのバグがこれを攻撃者に露出させます
ところで、なぜ黙ってペアリングできるようにしたかったのでしょうか。問題になったメカニズムの本来の目的をもっと詳しく知りたいです
実際に影響を受けた機器でなぜそうしていたのかは分かりません
この問題はmacOS 14.2とiOS 17.2で修正されました
https://support.apple.com/en-us/HT214036
https://support.apple.com/en-us/HT214035
Arch Linuxではbluez 5.70-2から修正されています [1]
[1]: https://gitlab.archlinux.org/archlinux/packaging/packages/bl...
「当時は Bluetooth が intimidating で、ただ安全だと仮定していた」というくだりが刺さる。複雑な技術スタックの上のほうのどこかにはちゃんと分かっている人たちがいて、砂上の城を棒で支えているわけではないはず、という神話は、そうした威圧感から生まれるように思う
携帯電話やコンピューターを相手に実用的かは疑わしいが、キオスク端末を誰にもいじられないよう管理しなければならない立場なら、日々が少し面白くなったと言える
バックドアを1つでもうまく仕込めれば、その後は作業できる
標的型攻撃なら、画面ロックがかからないよう1分ごとに Shift キー入力を送り、後で自分でその機械の前に行って何かをするだけでも十分かもしれない
sudoやsuをどこかに隠して$PATHに追加することも可能そうに見えるUSB も似ている。「充電専用」ポートにキーボードをつなぐと動作する。Android で実際に試したところ、ここでは実質的に悪用可能ではないとたしなめられた
それでもこれは脆弱性とは見なさない。単に便利な機能だ。ここでの問題は、誰かがユーザーに気づかれないまま、機密性の高い作業中でもこれを実行できることだ
昨日投稿された素晴らしいプロジェクト https://mitxela.com/projects/smsc も、この方法で携帯電話から使えた
Linux の脆弱性は2020年に修正されたが(CVE-2020-0556)、その修正はデフォルトでは無効のまま残っていた。ChromeOS だけがその修正を有効にしたとされており、Ubuntu、Debian、Fedora、Gentoo、Arch、Alpine が告知していたにもかかわらずそうだった
ただ、ディストリビューションの告知で単にアップグレードすれば直ると書かれているなら[2]、「修正がデフォルトでオフだった」とはどういう意味なのか分からない。アップグレード後も手動で設定変更が必要という意味なのか? NixOS の修正はデフォルト値を反転させるものに見える
明示的に
ClassicBondedOnly=falseを設定していたユーザーは変更する必要がある、という意味なら、もっとずっと明確に書けたはずだ[1] https://github.com/NixOS/nixpkgs/blob/3dda6d5ed56af34534dd4c...
[2] https://ubuntu.com/security/notices/USN-4311-1