ZephyrのBluetooth Classic Hands-Free Profile (HFP) ハンズフリー役割パーサー(subsys/bluetooth/host/classic/hfp_hf.c)にバッファ外書き込みの脆弱性があります。サービスレベル接続のセットアップ中に、HFはAT+CIND=?を送信し、cind_handle()でAGの+CIND:応答を解析します。この関数は各エントリーにカウンターインデックスを割り当て、cind_handle_values()をリストの各要素に対して呼び出します。cind_handle_values()は、indexがstruct bt_hfp_hfの20要素のint8_t ind_table[]配列の範囲内であることを確認せずにhf-ind_table[index] = iを書き込んでいます。パーサは+CIND:リストのエントリー数に制限を設けていないため、リモートのアテンダントゲートウェイ(悪意のある、侵害された、またはなりすましのBluetooth経由で接続されるピア)が20を超える認識されたインジケータエントリーを含む応答を送信すると、indexが任意に大きくなり、配列の隣接フィールド(機能マスク、SDP/バージョン状態、calls[]配列、作業/アトミックな帳簿など)や静的接続プールスロットを超えて書き込みが発生します。これによりメモリ破損が発生し、単一の不正なAT応答がBluetoothホストのサービス拒否を引き起こす可能性があります。この問題は、同様の処理であるag_indicator_handle_values()が既に同等の境界チェックを実施している一方で、本コミットで同じindex = ARRAY_SIZE(hf-ind_table)のガードを追加して問題を解消しました。CONFIG_BT_HFP_HFが有効なビルドに影響し、初期のHFP HF CINDパーサー(~v1.7)で導入されv4.4.0まで存在しています。
|