CVE-2026-46242, "Bad Epoll" olarak adlandırılan, Linux çekirdeğinin eventpoll (epoll) alt sisteminde bulunan kritik bir Use-After-Free (UAF) güvenlik açığıdır. Yerel bir saldırganın sistemi tamamen ele geçirerek root yetkisi elde etmesine olanak tanır. CVSS v3.1 puanı 7.8 ile "Yüksek" şiddet seviyesinde değerlendirilmektedir canlar.
Yani ilk red flag.
a) ep_remove() Hatalı Temizleme:
ep_remove() fonksiyonu, bir dosyayı temizlerken file f_ep işaretçisini file f_lock kilidi altında NULL olarak ayarlar. Ancak bu işaretçiyi temizledikten sonra aynı @file yapısını kritik bölüm içinde kullanmaya devam eder (is_file_epoll(), hlist_del_rcu() işlemleri ve spin_unlock() çağrısı sırasında).
b) __fput() Yarışı:
Bu kritik pencerede eşzamanlı çalışan bir __fput() işlemi, f_ep işaretçisindeki geçici NULL değerini görür. Bunun sonucunda:
Bu yarış sonucunda izlenen struct eventpoll nesnesi kfree() ile serbest bırakılır. Ancak kritik nokta:
Saldırganın bunu nasıl kullandığı: Saldırgan, bu çapraz-cache saldırısını kullanarak:
https://github.com/J-jaeyoung/bad-epoll daha detaylar için pocu
1. Saldırı Mekanizması
Açık, ep_remove() fonksiyonundaki bir yarış durumundan (race condition) kaynaklanır. İki çekirdek yolu aynı nesneyi temizlemeye çalıştığında çarpışma meydana gelir.Yani ilk red flag.
2. Bellek Katmanlarındaki Hata
Açığın temelinde üç seviyeli bir bellek yönetimi sorunu yatamakatadır:a) ep_remove() Hatalı Temizleme:
ep_remove() fonksiyonu, bir dosyayı temizlerken file f_ep işaretçisini file f_lock kilidi altında NULL olarak ayarlar. Ancak bu işaretçiyi temizledikten sonra aynı @file yapısını kritik bölüm içinde kullanmaya devam eder (is_file_epoll(), hlist_del_rcu() işlemleri ve spin_unlock() çağrısı sırasında).
b) __fput() Yarışı:
Bu kritik pencerede eşzamanlı çalışan bir __fput() işlemi, f_ep işaretçisindeki geçici NULL değerini görür. Bunun sonucunda:
- eventpoll_release() hızlı yoluna girer
- eventpoll_release_file() temizleme işlemini atlar
- Doğrudan f_op release file_free() çağrısına gider
Bu yarış sonucunda izlenen struct eventpoll nesnesi kfree() ile serbest bırakılır. Ancak kritik nokta:
- Serbest bırakılan struct eventpoll içindeki gömülü ->refs hlist_head, epi->fllink.pprev işaretçisinin tam olarak işaret ettiği adrestir.
- Bunun sonucunda hlist_del_rcu() işleminin *pprev = next yazma işlemi, zaten serbest bırakılmış kmalloc-192 bellek bölgesine yazar.
3. SLAB_TYPESAFE_BY_RCU ve Çapraz-Cache Saldırısı
Burada devreye giren ikinci önemli bellek yönetim mekanizması struct file nesnelerinin SLAB_TYPESAFE_BY_RCU işaretiyle ayrılmasıdır. Bu işaret, bir nesne serbest bırakıldıktan sonra aynı bellek yuvasının alloc_empty_file() tarafından yeniden kullanılabilmesine olanak tanır.Saldırganın bunu nasıl kullandığı: Saldırgan, bu çapraz-cache saldırısını kullanarak:
- İstenmeyen bir slab cache'e karşı kmem_cache_free() çağrısı tetikleyebilir
- Bu da yanlış cache'de bellek bozulmasına yol açar
- bundan dolayı eski linux çekirdekli işletim sistemlerinden kaçınalım derim.(arch kullanın)
https://github.com/J-jaeyoung/bad-epoll daha detaylar için pocu