CVE-2024-26737
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: bpf: bpf_timer_cancel_and_free ve bpf_timer_cancel arasındaki yarış durumu düzeltildi bpf_timer_cancel_and_free ile bpf_timer_cancel arasında aşağıdaki yarış durumu mümkündür. Bu durum, timer->timer üzerinde bir UAF (serbest bırakıldıktan sonra kullanım) hatasına yol açacaktır. bpf_timer_cancel(); spin_lock(); t = timer->time; spin_unlock(); bpf_timer_cancel_and_free(); spin_lock(); t = timer->timer; timer->timer = NULL; spin_unlock(); hrtimer_cancel(&t->timer); kfree(t); /* t üzerinde UAF */ hrtimer_cancel(&t->timer); bpf_timer_cancel_and_free fonksiyonunda bu yama, timer->timer nesnesini bir rcu grace period sonrasında serbest bırakır. Bu işlem, "struct bpf_hrtimer" yapısına bir rcu_head eklenmesini gerektirir. bpf_timer_init içerisinde başka bir kfree(t) işlemi gerçekleşmektedir; bu işlem hala spin_lock altındayken ve timer->timer henüz diğerleri tarafından görünür değilken yapıldığı için kfree_rcu gerektirmez. bpf_timer_cancel fonksiyonuna, bu yardımcı fonksiyonun rcu kritik bölümü dışındaki bağlamlarda (örneğin uyuyabilen bir bpf programından) kullanılabilecek olması nedeniyle rcu_read_lock() eklenmiştir. helpers.c dosyasındaki diğer timer->timer kullanımları denetlenmiş olup, bpf_timer_cancel() fonksiyonunun timer->timer'ın spin_lock dışında kullanıldığı tek yer olduğu görülmüştür. Değerlendirilen bir diğer çözüm ise bpf_timer_cancel içinde bir t->flag işaretlemek ve hrtimer_cancel() tamamlandıktan sonra bunu temizlemekti. bpf_timer_cancel_and_free fonksiyonunda ise kfree(t) öncesinde bayrağın temizlenmesi için meşgul bekleme (busy wait) yapılmaktaydı. Bu yama, doğrudan bir çözüm sunarak timer->timer nesnesini bir rcu grace period sonrasında serbest bırakmaktadır.
Nasıl düzeltilir
- linux linux_kernel5.15.150, 6.1.80, 6.6.19, 6.7.7 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.15 ≤ v < 5.15.150, 5.16 ≤ v < 6.1.80, 6.2 ≤ v < 6.6.19, 6.7 ≤ v < 6.7.7, 6.8 | 5.15.150, 6.1.80, 6.6.19, 6.7.7 |
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.