CVE-2026-64363
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: HID: appleir: remove() fonksiyonundaki bekleyen key_up_timer üzerindeki UAF hatası düzeltildi appleir_remove(), timer_delete_sync() işleminden önce hid_hw_stop() işlemini yürütür. hid_hw_stop(); hid_disconnect() -> hidinput_disconnect() -> input_unregister_device() aracılığıyla HID giriş aygıtının kaydını senkronize olarak siler; bu durum, kullanıcı alanı tarafından açık tutulan bir tutamaç olmadığında son referansı düşürür ve temel input_dev yapısını serbest bırakır. key_up_tick(), appleir->input_dev değerini okur ve üzerinde input_report_key() / input_sync() çağrılarını yapar. Zamanlayıcı, her tuşa basma (keydown) ve tuş tekrarlama raporunda appleir_raw_event() üzerinden HZ/8 (~125 ms) zaman aşımı ile kurulur. Eğer cihaz bağlantısı kesilmeden kısa süre önce bir tuşa basılmışsa, zamanlayıcı hid_hw_stop() tarafından input_dev serbest bırakıldıktan sonra ancak kaldırma işlemi tamamlanmadan önce tetiklenebilir. Basit bir yeniden sıralama yeterli değildir. Zamanlayıcı boşaltma işleminin başa alınması, hid_hw_stop() sırasında çalışan bir USB URB tamamlamasının (raw_event), mod_timer() çağrısı yaparak zamanlayıcıyı yeniden kurabileceği bir pencere bırakır; bu durumda zamanlayıcı, hidinput_disconnect() input_dev yapısını serbest bıraktıktan sonra tetiklenir. Aynı URB-tamamlama penceresi ayrıca raw_event()'ın doğrudan key_up(), key_down() ve battery_flat() fonksiyonlarına ulaşmasına izin verir ve bunların tümü appleir->input_dev referansını çözer. Mevcut spinlock ile korunan struct appleir yapısına bir 'removing' bayrağı eklenmiştir. appleir_remove(), kilit altında bu bayrağı ayarlar ve ardından timer_shutdown_sync() ile zamanlayıcıyı kapatır; bu işlem hem mevcut geri çağırmaları boşaltır hem de sonraki mod_timer() çağrılarını kalıcı olarak devre dışı bırakır. appleir_raw_event() ve key_up_tick(), bayrak ayarlanmışsa işlemi erken sonlandırır, böylece remove() kaldırma işlemine başladıktan sonra hiçbir yol zamanlayıcıyı kuramaz, çalıştıramaz veya appleir->input_dev referansını çözemez. appleir_raw_event()'ın keyrepeat ve flatbattery dalları daha önce spinlock tutmadan giriş katmanını çağırıyordu; bayrak kontrolünün tanımlı olması için artık kilit tutulmaktadır. Bu durum tesadüfen, keyrepeat dalındaki appleir->current_key üzerindeki önceden var olan bir okuma tarafı yarış durumunu da kapatır. Bu hata yapısal olarak 4db2af929279 ("HID: appletb-kbd: fix UAF in inactivity-timer cleanup path") commit'inin benzeridir ve sürücü tanıtıldığından beri mevcuttur.
Nasıl düzeltilir
- linux linux_kernel5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.39, 7.1.4 ya da sonraki bir sürüm
- git.kernel.org/stable/c/05e3decc55d1deca9410e0eb36466651fcbe57a5
- git.kernel.org/stable/c/3755f6e25776b8b12ddf062f9b573f05090e4034
- git.kernel.org/stable/c/37a52c61d4f78153c38ae1f7491dfcc8ac828dcf
- git.kernel.org/stable/c/3d30a0bb0e79621ae921b487835c56198adfafa3
- git.kernel.org/stable/c/6b0838e86da88b1d3bff86f19761ff25af73eaca
- git.kernel.org/stable/c/75fe87e19d8aff81eb2c64d15d244ab8da4de945
- git.kernel.org/stable/c/89ef67359672bf4cd6921524e39f61648fe38c0f
- git.kernel.org/stable/c/b363d964ca829c1761c9f04188dfa28f90b0f2d4
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 3.10 ≤ v < 5.10.261, 5.11 ≤ v < 5.15.212, 5.16 ≤ v < 6.1.178, 6.2 ≤ v < 6.6.145, 6.7 ≤ v < 6.12.97, 6.13 ≤ v < 6.18.39, 6.19 ≤ v < 7.1.4, 7.2 | 5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.39, 7.1.4 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.