CVE-2026-80761 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
Bluetooth: ISO: getnameで返却する前にsockaddrをゼロクリアする
iso_sock_getname()関数は、struct sockaddr_iso構造体をその場で埋めてサイズを返しますが、最初に初期化(ゼロクリア)を行わないため、書き込まれていないバイトがカーネルスタックからユーザー空間にコピーされてしまいます。getsockname(2)およびgetpeername(2)の処理パスはどちらもdo_getsockname()を通り、この関数は未初期化のsockaddr_storageをスタック上に渡してgetname()で返されたバイト数分だけデータを戻します。そのため、ドライバ側ではカウントしているすべてのバイトを初期化する必要があります。
以下の2つの範囲が未初期化のままになっています:
- struct sockaddr_isoは10バイトですが、そのうち9バイトしか書き込まれていません(family, iso_bdaddr, iso_bdaddr_type)。これにより、呼び出しのたびに末尾のパディングバイトがリークします。 - ブロードキャストピア(BIS_LINKまたはPA_LINK)の場合、返される長さはsizeof(struct sockaddr_iso_bc)だけ増えますが、bc_sid、bc_num_bis、およびbc_bisのみが埋められ、その構造体の最初の7バイトであるbc_bdaddrとbc_bdaddr_typeは一度も書き込まれません。
特権のないプロセスはBTPROTO_ISOソケットを開いてgetsockname()でパディングリークにアクセスできます。ブロードキャストによるリークには、確立されたBIS/PA接続が必要です。l2capおよびrfcommでは、同じ理由によりgetname処理中にsockaddrをmemsetしていますので、ここでも同様の対応を行います。
VulDB is the best source for vulnerability data and more expert information about this specific topic.