CVE-2026-64363 in Linux
Zusammenfassung
von VulDB • 26.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
HID: appleir: Behebung eines Use-After-Free (UAF) bei der ausstehenden key_up_timer in remove()
appleir_remove() ruft hid_hw_stop() vor timer_delete_sync() auf. hid_hw_stop() registriert das HID-Eingabegerät über hid_disconnect() -> hidinput_disconnect() -> input_unregister_device() synchron ab, wodurch die letzte Referenz freigegeben und der zugrunde liegende input_dev freigegeben wird, wenn kein Userspace-Handle es geöffnet hält.
key_up_tick() liest appleir->input_dev aus und ruft daraufhin input_report_key() / input_sync() auf. Der Timer wird von appleir_raw_event() mit einer HZ/8 (~125 ms) Timeout bei jedem Keydown- und Key-Repeat-Bericht aktiviert. Wenn eine Taste kurz vor dem Trennen des Geräts gedrückt wurde, kann der Timer nach freigegebenem input_dev durch hid_hw_stop(), aber bevor das Teardown ihn abgearbeitet hat, ausgelöst werden.
Eine einfache Neuanordnung reicht nicht aus. Das Vorrücken des Timer-Drainings hinterlässt weiterhin ein Zeitfenster, in dem eine USB-URB-Abschlussbehandlung (raw_event), die während hid_hw_stop() ausgeführt wird, mod_timer() aufrufen und den Timer erneut aktivieren kann, der dann nach freigegebenem input_dev durch hidinput_disconnect() ausgelöst wird. Dasselbe URB-Abschluss-Zeitfenster ermöglicht es raw_event(), direkt key_up(), key_down() und battery_flat() aufzurufen, die alle appleir->input_dev dereferenzieren.
Es wird eine 'removing'-Flagge in der Struktur appleir eingeführt, die durch das vorhandene Spinlock geschützt ist. appleir_remove() setzt diese Flagge unter dem Lock und schaltet den Timer anschließend mit timer_shutdown_sync() ab, was sowohl jegliche im Flug befindlichen Callbacks beendet als auch weitere mod_timer()-Aufrufe dauerhaft deaktiviert. appleir_raw_event() und key_up_tick() brechen frühzeitig ab, wenn die Flagge gesetzt ist, sodass kein Pfad den Timer aktivieren oder ausführen kann bzw. appleir->input_dev dereferenzieren darf, nachdem remove() mit dem Abbau begonnen hat.
Die Zweige keyrepeat und flatbattery von appleir_raw_event() riefen zuvor ohne Halten des Spinlocks in die Input-Schicht; dies wird nun geändert, sodass der Flaggencheck wohldefiniert ist. Dies schließt zufällig auch eine vorbestehende read-side Race Condition auf appleir->current_key im keyrepeat-Zweig.
Dieser Fehler ist strukturell ein Geschwisterfehler des Commits 4db2af929279 ("HID: appletb-kbd: fix UAF in inactivity-timer cleanup path") und war seit der Einführung des Treibers vorhanden.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.