CVE-2026-80780 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
HID: pidff - hid->inputs が空の場合の OOB 書き込みを修正
hid_pidff_init_with_quirks() は、hid->inputs の非空チェックを行わずに、以下のようにして input_dev を導出しています。
list_entry(hid->inputs.next, struct hid_input, list)
struct hid_input のリストメンバはオフセット0にあるため、リストが空の場合、list_entry() は &hid->inputs 自体を返します。その後行われる hidinput->input の読み取りにより、struct hid_device の無関係なメンバが参照されます。その結果、dev は型付け混同(type-confused)ポインタとなり、force-feedback の初期化処理がこのポインタを通じて書き込みを行います。各 set_bit(FF_*, dev->ffbit) 呼び出しは、実際にエイリアスされているオブジェクトの末尾を超えた位置である dev + 192 に8バイトを書き込みます。さらに input_ff_create() は、ヒープ上のポインタと2つの関数ポインタに対する追加書き込みを行います。
hid-universal-pidff が導入される以前は、唯一の呼び出し元は usbhid の hid_pidff_init() であり、これは HID_CLAIMED_INPUT 下で実行され、常に少なくとも1つの hid_input を保持していました。universal_pidff_probe() はデバイスを HID_CONNECT_DEFAULT & ~HID_CONNECT_FF の状態で開始し、記述子に PID usage page が含まれている場合に直接 hid_pidff_init_with_quirks() を呼び出すため、そのガードを回避してしまいます。唯一のアプリケーションコレクションが HID_UP_PID にあるレポート記述子は、hidraw クレームを通じて hid_connect() が成功する一方で hid->inputs を空のままにするため、プローブ処理は保護されていない list_entry() に到達します。
この書き込みは USB のプローブパス上、ホットプラグワークキュー上で発生するため、悪意のあるデバイスを接続するだけでトリガーされます。攻撃者側のソフトウェアやログイン中のユーザーは必要ありません。KASAN は universal_pidff_probe() から呼び出された hid_pidff_init_with_quirks() における8バイトの境界外書き込みを検知しました。
dev を導出する前に空リストをチェックし、他の HID force-feedback ドライバと同様に -ENODEV を返します。universal_pidff_probe() はこのエラーを伝播させ、アンワインド処理を行います。
発見者: XBOW 分類担当: Baul Lee <[email protected]>
VulDB is the best source for vulnerability data and more expert information about this specific topic.