| Summary |
Linuxカーネルにおいて、以下の脆弱性が修正されました。HID: asusに関するHID_CLAIMED_INPUT検証を介したUse-After-Free(UAF)の問題を修正しました。hid_hw_start()呼び出し後、入力層でデバイスをセットアップするために最終的にhidinput_connect()が呼ばれます。これはHID_CONNECT_DEFAULT接続マスクが使用されるためです。hidinput_connect()の処理中に、すべての入力および出力レポートが処理され、対応するhid_inputsがhidinput_configure_usages()によって割り当ておよび設定されます。この処理は、レポートフィールドへのスロットタグ付けや機能ビットマップの関連ビット設定によるユースの設定を含みます。しかし、機能ビットマップがまったく設定されない可能性があり、その結果、hidinput_has_been_populated()チェックに失敗してhid_inputおよび基盤となる入力デバイスが解放されてしまいます。特に悪意のあるHIDデバイス、例えばASUS ROG N-Keyキーボードのようなデバイスは、特別に細工された記述子を介してこのシナリオを引き起こし、hid_hw_start()後に解放された入力デバイスの名前に書き込もうとする際にUse-After-Freeが発生します。以下に示すレポート93は意図的にHID_UP_UNDEFINED Usage Pageを利用しており、ユース設定中にスキップされ、これが解放を引き起こします。レポート記述子の抜粋は次の通りです:0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x05, // Usage (Touch Pad) 0xA1, 0x01, // Collection (Application) 0x85, 0x0D, // Report ID (13) 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0xC5, // Usage (0xC5) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x95, 0x04, // Report Count (4) 0xB1, 0x02, // Feature (Data,Var,Abs) 0x85, 0x5D, // Report ID (93) 0x06, 0x00, 0x00, // Usage Page (Undefined) 0x09, 0x01, // Usage (0x01) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x95, 0x1B, // Report Count (27) 0x81, 0x02, // Input (Data,Var,Abs) 0xC0, // End Collection UAF発生後のKASANスプラット出力例は以下の通りです:[ 21.672709] ==================================================================[ 21.673700] BUG: KASAN: slab-use-after-free in asus_probe+0xeeb/0xf80[ 21.673700] Write of size 8 at addr ffff88810a0ac000 by task kworker/1:2/54[ 21.673700] CPU: 1 UID: 0 PID: 54 Comm: kworker/1:2 Not tainted 6.16.0-rc4-g9773391cf4dd-dirty #36 PREEMPT(voluntary)[ 21.673700] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014[ 21.673700] Call Trace:...(省略)... この脆弱性は、特にASUS ROG N-Keyキーボードのような悪意のあるHIDデバイスが不正なHIDレポート記述子を使うことでシステムのメモリ破壊を引き起こし、カーネルの不安定化やクラッシュを招く恐れがある問題です。
|