CVE-2025-38554
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: mm: vma->vm_refcnt azaldıldıqdan sonra vma->mm azad edildikdə yaranan UAF xətası düzəldildi Jann Horn müvafiq yerlərdə gecikmələr yaradaraq, VMA-ların keşlərində SLAB_TYPESAFE_BY_RCU əlavə edilərək təkrar istifadəsinə icazə verildikdən sonra mümkün olan və aşkar edilməsi çətin olan bir UAF probleminin reproduserini yaratdı. Yarışın (race condition) təsviri Jann-in kəşf hesabatından götürülüb: lock_vma_under_rcu() funksiyası rcu_read_lock() altında mas_walk() vasitəsilə kilidsiz şəkildə VMA-nı axtarır. Həmin anda VMA eyni vaxtda azad edilə bilər və başqa bir proses tərəfindən təkrar istifadə oluna bilər. Daha sonra vma_start_read() vma->vm_refcnt dəyərini artırır (əgər o, qəbul edilən diapazondadırsa) və bu uğurlu olduqda, vma_start_read() təkrar istifadə edilmiş VMA qaytara bilər. VMA-nın təkrar istifadə edildiyi bu ssenaridə, lock_vma_under_rcu() uyğun gəlməyən ->vm_mm göstəricisini aşkar edəcək və vma_end_read() vasitəsilə VMA-nı buraxacaq ki, bu da vma_refcount_put() funksiyasını çağırır. vma_refcount_put() refcount-u azaldır və sonra vma->vm_mm nüsxəsindən istifadə edərək rcuwait_wake_up() funksiyasını çağırır. Bu yanlışdır: Burada implicit olaraq fərz edilir ki, çağıran tərəf VMA-nın mm obyektini aktiv saxlayır, lakin bu ssenaridə çağıranın VMA-nın mm ilə heç bir əlaqəsi yoxdur, buna görə də rcuwait_wake_up() UAF-a səbəb ola bilər. Yarışı təsvir edən diaqram: T1 T2 T3 == == == lock_vma_under_rcu mas_walk <VMA mm-dən çıxarılır> mmap <eyni VMA yenidən ayrılır> vma_start_read __refcount_inc_not_zero_limited_acquire munmap __vma_enter_locked refcount_add_not_zero vma_end_read vma_refcount_put __refcount_dec_and_test rcuwait_wait_event <əməliyyat tamamlanır> rcuwait_wake_up [UAF] Qeyd edin ki, T3-dəki rcuwait_wait_event() bloklanmır, çünki refcount artıq T1 tərəfindən azaldılmışdı. Bu nöqtədə T3 çıxa və mm-i azad edə bilər ki, bu da T1-də UAF-a səbəb olur. Bunun qarşısını almaq üçün biz vma->vm_mm yoxlamasını vma_start_read() daxilinə köçürürük və vma_refcount_put() əməliyyatından əvvəl onu sabitləşdirmək üçün vma->vm_mm-i əldə edirik. [[email protected]: v3]
Necə düzəltmək olar
- linux linux_kernel6.15.10, 6.16.1 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.15 ≤ v < 6.15.10, 6.16 ≤ v < 6.16.1 | 6.15.10, 6.16.1 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.