CVE-2026-97533
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: x86/mm/pat: UAF-ın qarşısını almaq üçün atribut dəyişiklikləri zamanı init_mm oxuma kilidi əldə edin Əvvəlki commit ptdump və CPA collapse arasındakı yarış şəraitinin (race condition) qarşısını almışdı, lakin Denis V. Lunev tərəfindən bildirildiyi kimi, atribut dəyişiklikləri və collapse arasında hələ də belə bir problem mövcuddur. Atribut dəyişikliyi baş verdikdə, kilidsiz səhifə cədvəli gəzicisi (page table walker) bir PTE yazılışı əldə edir və daha sonra bu yazıya set_pte_atomic() vasitəsilə müraciət edilir: ... -> change_page_attr_set_clr() -> __change_page_attr_set_clr() -> __change_page_attr() -> _lookup_address_cpa() -> lookup_address_in_pgd_attr() -> [ kilidsiz səhifə cədvəli gəzicisi ] -> set_pte_atomic() Eyni vaxtda baş verən CPA collapse prosesini dayandıran heç bir məhdudiyyət yoxdur ki, bu da burada əldə edilmiş PTE-nin azad edilməsinə və nəticədə use-after-free (UAF) xətasına səbəb ola bilər. CPA collapse zamanı init_mm üzərində mmap yazı kilidi götürüldüyü üçün, __change_page_attr_set_clr() funksiyasında init_mm üzərində mmap oxuma kilidi əldə etməklə bu yarış şəraiti həll edilir. Bu, gəzmə və PTE yazılışının baş verdiyi bütün əməliyyat boyunca kilidləməni təmin edərək problemi həll edir. Bunu burada etmək təhlükəsizdir, çünki __change_page_attr_set_clr() funksiyasına daxil olduqda heç bir spinlock saxlanılmır. Lakin, kilid allokasiya zamanı saxlanılmamalıdır, çünki allokasiya reclaim prosesini tetikləyə bilər və shrinker-lər rekursiv olaraq CPA-nı çağıra bilər ki, bu da deadlock-lara yol aça bilər (init_mm -> ... -> fs_reclaim -> init_mm). Hücumlu səhifənin (huge page) bölünməsi lazım olduqda səhifə cədvəli allokasiya edilir: -> change_page_attr_set_clr() -> __change_page_attr_set_clr() -> __change_page_attr() -> split_large_page() [ pagetable_alloc() ] -> __split_large_page() Deadlock-ların qarşısını almaq üçün split_large_page() daxilində pagetable_alloc() zamanı mmap kilidi buraxılır və bunun lazım olub-olmadığı struct cpa_data-ya yeni 'init_mm_read_locked' bayrağının əlavə edilməsi ilə izlənilir. Bu təhlükəsizdir, çünki __split_large_page() (kilidlər yenidən bərpa edildikdən sonra çağırılır) səhifə cədvəli yazılışının kilidlər buraxılmazdan əvvəlki ilə eyni olduğunu yenidən yoxlayır və bölünmə baş verdikdə __change_page_attr() bütün səhifə cədvəli gəzməsini təkrar edir, beləliklə eyni vaxtda baş verən split və collapse prosesləri nəzərə alınır. Eyni vaxtda baş verən ptdump da təhlükəsizdir, çünki kilid yalnız səhifə cədvəlinin allokasiyası zamanı buraxılır və həmin müddətdə səhifə cədvəli hələ dəyişdirilməmiş olur. CPA_COLLAPSE bayrağı yalnız set_memory_rox() tərəfindən təyin edilir ki, o da eksklüziv olaraq vmalloc diapazonları üzərində və x86-da yalnız modul xəritələmə sahəsi (module mapping space) daxilində işləyir. Bu vacibdir, çünki bəzi çağırıcılar bu kilidi yan keçərək birbaşa __change_page_attr_set_clr() funksiyasını çağırırlar. Lakin onların heç biri modul xəritələmə sahəsi daxilində işləmir: * cpa_process_alias() - __change_page_attr_set_clr() tərəfindən çağırılan rekursiv köməkçi funksiya. * __set_memory_enc_pgtable() - birbaşa xəritələmə (direct mapping) və (__vmbus_establish_gpadl() vasitəsilə) vmalloc xəritələmə sahəsi üzərində işləyir. * __set_pages_[n]p() - set_direct_map_[invalid, default, valid]_noflush(), __kernel_map_pages() tərəfindən çağırılır - birbaşa xəritə üzərində işləyir. * kernel_[un]map_pages_in_pgd() - EFI diapazonları üzərində işləyir. Bu iş Denis V. Lunevin xətaya dair mükəmməl analizinə əsaslanır və ona minnətdarlıq bildirilir. [ dhansen: dəyişiklik jurnalında imperativ səsə keçirin ]
Necə düzəltmək olar
- Linux Linuxe21a9ea81426a85fdb0cdcfcc99d5d9c16b402ab, cc73b2043d106b467accd38e9b1fc09e0607c056, d5d8b8662e6e5a565b47a0388640e88402f23274 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 41d88484c71cd4f659348da41b7b5b3dbd3be1f6 ≤ v < e21a9ea81426a85fdb0cdcfcc99d5d9c16b402ab, 41d88484c71cd4f659348da41b7b5b3dbd3be1f6 ≤ v < cc73b2043d106b467accd38e9b1fc09e0607c056, 41d88484c71cd4f659348da41b7b5b3dbd3be1f6 ≤ v < d5d8b8662e6e5a565b47a0388640e88402f23274, 6.15 | e21a9ea81426a85fdb0cdcfcc99d5d9c16b402ab, cc73b2043d106b467accd38e9b1fc09e0607c056, d5d8b8662e6e5a565b47a0388640e88402f23274 |
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.