By Vit Sembera (Senior Threat Researcher, Automotive)
Pwn2Own Automotive 2024 ゼロデイ脆弱性発見コンテストでは、Alpine Halo9 iLX-F509 車載インフォテインメント(IVI)システムに複数の脆弱性が発見されました。その中には、CVE-2024-23923という、独自仕様のBluetoothスタックにおけるゼロクリック型のメモリ開放後利用(UAF)リモートコード実行(RCE)の脆弱性が含まれていました。PCAutomotiveのシニアセキュリティリサーチャーであるMikhail Evdokimov氏によって発見されたこの脆弱性は、独自仕様のソリューションでは重要な保護機能が欠如していることが多い、最新の自動車システムにおける重大なセキュリティ上の懸念を提起しています。
Pwn2Own Automotiveの共同主催者であり、脆弱性の発見と開示におけるパートナーであるZero Day Initiative(ZDI)は、CVE-2024-23923をAlpineに報告しました。ISO/SAE 21434に基づく脅威評価および修正分析(TARA)を実施した結果、ベンダーはこの脆弱性については“sharing the risk”(リスクを共有)と分類して、残存リスクを受け入れることを決定したことを示し、パッチをリリースせずに現行のソフトウェアの使用を継続することを選択しました。
ファームウェアの抽出と初期発見
PCAutomotiveによる脆弱性分析は、対象パーツのはんだ除去などは必要とせず、デバイスのeMMCチップから直接ファームウェアを抽出することから開始されました。さらに、量産用のファームウェアにデバッグシンボルがそのまま残っていたため、コードのリバースエンジニアリング作業も簡単になりました。こういったアクセスのしやすさが、システムの Bluetooth スタックを徹底的に調査することを可能にし、最終的に重大な脆弱性の発見につながったといえます。
脆弱性分析の詳細については、リサーチャーによるHexacon 2024のプレゼンテーション ”0-click RCE on the IVI component: Pwn2Own Automotive edition”を参照してください。
Bluetooth ACL処理にUAFを発見
CVE-2024-23923は、Bluetoothプロトコルスタック内のデータ転送メカニズムであるBluetooth Host Controller Interface Asynchronous Connection-Oriented Logical Link (HCI ACL)のコードで発見されました。リサーチャーは静的解析により、コードにメモリ解放後使用(UAF:Use After Free)の脆弱性があることを発見しました。
この脆弱性は、3つの連続した非同期接続プロトコルデータユニット(ACL PDU)の着信を含む特定の条件下で発生する可能性があります。この脆弱性はBluetooth認証の前に悪用される可能性があることに加えて、ユーザーの操作を必要としないゼロクリック型の攻撃シナリオも考えられるため、特に深刻です。
攻略が容易であった要因はいくつかあります。当該プロセスがルート権限で実行されていたこと、固定アドレスが使用されていて、スタックカナリアやアドレス空間配置のランダム化(ASLR)など重要なセキュリティ緩和策が欠けていたこと、などが挙げられます。これらの欠落はリサーチャーが攻略検証を行ううえではエクスプロイトを助長する結果につながりました。
エクスプロイト成功率を60%から96%に
リサーチャーの最初の攻略検証では成功率は60%でしたが、引き続き綿密な調整を重ねることにより、なんと96%の成功率を達成しました。ここで採られた戦略は、システムのメモリを正確に操作するために複数の「プリミティブ」を駆使するというものでした。以下にその技法の概要を示します。
- ユニバーサル ヒープスプレー:ヒープメモリのレイアウトを制御して、エクスプロイトの許容性を高めました。
- 任意のアドレス書き込み(AAW):拡張再送信モード(ERTM)チャネルのIフレームを利用して、任意のヒープ書き込みを実行しました。これらのチャネルは通常、Bluetooth認証後にのみ利用可能になりますが、ヒープオーバーフロー状態を利用することでこの制限を回避しました。さらに、適切なヒープ アリーナを選択しなければならないという課題には、ヒープ チャンク フラグを確認することで解決しました。
- ヒープセグメントのメモリリーク:L2CAP(Logical Link Control and Adaptation Protocol)のエコー要求/応答パケットを使用して、ヒープセグメントのアドレスをリークさせました。応答の長さを変更し、AAWプリミティブを適用することで、メモリ構造を観察することができました。
- 任意のアドレス読み取り(AAR):ERTMチャネルのSフレーム拒否プロトコルデータユニット(REJ PDU)を利用してヒープポインタを変更することで、任意のメモリロケーションの読み取りを可能にしました。
- libcアドレスおよびシステム関数の検出:AARプリミティブを使用してヒープメモリのmalloc_state構造を走査し、リモートコード実行に必要なsystem()関数など、主要なlibcアドレスを特定します。
- Bluetooth スレッドスタックアドレスの抽出:libpthread内の対応するスレッド制御ブロック(TCB)を介して Bluetoothスレッドスタックアドレスを取得しました。AARプリミティブを使用して、TCBが存在する二重リンクリストをナビゲートしました。
- リターン指向プログラミング(ROP)チェーンの作成:スタック上にROPチェーンを構築し、システムレベルのコマンド実行を可能にしました。
これらの慎重に計画された手順を経て、リサーチャーは高い再現性を備えたゼロクリックのリモートコード実行(RCE)を実証しました。
Bluetoothの攻撃ベクトルから学ぶセキュリティ対策
Alpine Halo9 IVIシステムにおけるこのUAFの脆弱性は、広く使用されている技術(Bluetoothなど)の独自実装に伴うリスクを露わにしています。このケースでは、脆弱性はスタックのより高度で専門的なレイヤーではなく、HCIのすぐ上の基本的なL2CAPレイヤーに存在していました。ベンダーが、十分にテストされた業界標準のソリューションではなく、独自仕様のBluetoothスタックを使用するという決定を下したことで、システムがセキュリティリスクにさらされる度合いが大幅に高まったと言えます。
さらに問題を拡大させたのは、スタックカナリア、ASLR、量産用ファームウェアにおけるデバッグシンボルの削除といった必須のセキュリティ緩和策が講じられていなかったため、システムが攻撃に対して非常に脆弱であったことです。Bluetoothは本質的に複雑であるため、この事例が示すように、実装エラーが頻繁に発生し脆弱性の温床となることから、依然としてハッカーに好まれる攻撃経路となっています。
CVE-2024-23923の発見は、安全で業界が検証済みのプロトコルを採用し、強固なサイバーセキュリティ対策を実施することの重要性を強調しています。独自開発のソリューションは、回避可能なリスクを招くことが多く、コネクテッドテクノロジーが自動車業界で急速に普及するにつれて、自動車メーカーとサプライヤーは、システムとユーザーを保護するために、セキュリティのベストプラクティスを優先する必要があるのではないでしょうか。
責任ある情報開示の時間軸に関する背景
Pwn2OwnイベントでZDIが、或るチームがデバイスやソフトウェアを「ハックに成功」または「pwned」と発表してから、そのハックに使用されたテクニックが公表されるまで、しばしば遅延があることに疑問を持たれた方も多いでしょう。この遅延は、ゼロデイ脆弱性をより責任を持って管理するために設計された調整型脆弱性開示(CVD)プロセスの一部です。
1990年代には、脆弱性を積極的に探し出すハッカーはごくわずかであり、多くのベンダーは脆弱性への対処に備えていませんでした。ホワイトハッカーもベンダーも、「ハッカーは利益と引き換えに脆弱性を報告しているのではないか?」や「脆弱性は修正されるのか、それとも報告は時間の無駄になるのか?」といった懸念を抱えていました。そして、次のような譲歩案が採用されることになりました。まずハッカーが脆弱性をベンダーに報告し、その後、ベンダーがパッチをリリースし、ハッカーの発見を公に認めるというものです。
ZDIの情報開示ポリシーに基づき、提出された脆弱性は、パッチが利用可能になった時点で、またはベンダーが対応しない場合は一定期間経過後に開示されます。このアプローチにより、問題が解決されるか、または修正方法が知られていない脅威が公に認知されることで、脆弱性が悪用されるリスクが回避または抑止されます。これが、脆弱性が最初に提出されてから詳細が公表されるまでの時間差を説明するものです。