JVNDB-2026-032206 | |
LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。HID: appleirのremove()内にある保留中のkey_up_timerに関するUse-After-Free(UAF)を修正しました。appleir_remove()はtimer_delete_sync()の前にhid_hw_stop()を実行します。hid_hw_stop()はhid_disconnect() -> hidinput_disconnect() -> input_unregister_device()を介してHID入力デバイスの登録を同期的に解除し、ユーザースペースからのハンドルが開かれていなければ最後の参照を離して基底のinput_devを解放します。key_up_tick()はappleir->input_devを読み取り、その上でinput_report_key()およびinput_sync()を呼び出します。このタイマーはappleir_raw_event()から、各キー押下およびキーリピートの報告時にHZ/8(約125ms)のタイムアウトでセットされます。デバイス切断直前にキーが押された場合、タイマーがhid_hw_stop()がinput_devを解放した後、しかしteardownが完了する前に発火する可能性があります。単純な処理の順序変更だけでは不十分です。タイマーの処理を先に行っても、hid_hw_stop()の実行中にUSB URB完了(raw_event)がmod_timer()を呼び出してタイマーを再設定し、次にhidinput_disconnect()がinput_devを解放した後にタイマーが発火するウィンドウが残ります。同じURB完了のタイミングでraw_event()がkey_up()、key_down()、battery_flat()に直接到達することも可能であり、これらはすべてappleir->input_devを参照します。struct appleirに既存のスピンロックで保護される'removing'フラグを導入しました。appleir_remove()はフラグをロック下でセットし、その後timer_shutdown_sync()でタイマーを停止します。これにより、実行中のコールバックをすべて消化し、さらにmod_timer()の呼び出しを永久に無効化できます。appleir_raw_event()とkey_up_tick()はこのフラグがセットされている場合は早期に処理を中断し、remove()による解除が始まった後にタイマーがセットまたは実行されたり、appleir->input_devが参照されたりする経路をなくします。appleir_raw_event()のkeyrepeatおよびflatbatteryの分岐は、以前はスピンロックを保持せずに入力層を呼んでいましたが、フラグチェックを適切に行うために今回スピンロックを取得するように変更しました。これにより、keyrepeat分岐のappleir->current_keyの読み取り側の競合も偶然修正されました。このバグはコミット4db2af929279("HID: appletb-kbd: 不活性タイマーのクリーンアップ経路におけるUAFの修正")と構造的に類似しており、ドライバが導入された時点から存在していました。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 7.8 (重要) [NVD値]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/07/25 |
| 登録日 | 2026/09/07 |
| 最終更新日 | 2026/09/07 |



