CVE-2026-64539 in Linux
要約
〜によって VulDB • 2026年07月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
Bluetooth: eir: Flags ADの先頭追加時にスタック外書き込み(OOB write)を修正
eir_create_adv_data()関数は、広告データを固定サイズのバッファ(レガシーパスでは「size」31バイト)に構築します。この際、LE専用コントローラの場合などに3バイトの「Flags」AD構造体(LE_AD_NO_BREDR)を先頭に追加し、その後でインスタンスごとのデータのコピーを実行しますが、コピー後にまだバッファ内に収まるかどうかの確認を行っていません:
memcpy(ptr, adv->adv_data, adv->adv_data_len);
tlv_data_max_len()関数は、ユーザーから提供されたフラグに管理対象のフラグビットが含まれている場合のみ、その3バイトを予約します。そのため、flags == 0で追加されるインスタンスは、adv_data_lenがバッファ全体まで許容されます。広告実行時にフラグはまだ先頭に追加され、memcpy()によって size バイトのバッファに対して 3 + adv_data_len バイトが書き込まれます:
BUG: KASAN: stack-out-of-bounds in eir_create_adv_data (net/bluetooth/eir.c:301) Write of size 31 at addr ffff88800a547bdc by task kworker/u9:0/65 Workqueue: hci0 hci_cmd_sync_work __asan_memcpy (mm/kasan/shadow.c:106) eir_create_adv_data (net/bluetooth/eir.c:301) hci_update_adv_data_sync (net/bluetooth/hci_sync.c:1310) hci_schedule_adv_instance_sync (net/bluetooth/hci_sync.c:1817) hci_cmd_sync_work (net/bluetooth/hci_sync.c:332) This frame has 1 object: [32, 64) 'cp'
「Flags」構造体はカーネルによって追加されるものであり、ユーザー空間から要求されているものではないため、インスタンスの広告データと合わせて収まる場合のみ先頭に追加してください。両方を格納する余地がない場合は、ユーザー提供データをドロップするのではなく、フラグをドロップします。
レガシーな広告パスにおいて、LE専用コントローラを所有しCAP_NET_ADMIN権限を持つローカルユーザーから到達可能です。
VulDB is the best source for vulnerability data and more expert information about this specific topic.