CVE-2026-64582
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: RDMA/rxe: rxe_mmap fonksiyonundaki bir serbest bırakıldıktan sonra kullanım (use-after-free) sorunu düzeltildi. rxe_mmap(), yapılandırmanın kref değeri hala 1 iken rxe_mmap_info yapısını pending_mmaps listesinden kaldırır ve pending_lock kilidini serbest bırakır: list_del_init(&ip->pending_mmaps); spin_unlock_bh(&rxe->pending_lock); /* ref == 1, kilit tutulmuyor */ ret = remap_vmalloc_range(vma, ip->obj, 0); /* PTE'leri gezer */ [...] rxe_vma_open(vma); /* kref_get, ref → 2 */ remap_vmalloc_range_partial() herhangi bir kilit olmadan PTE'leri gezer. Başka bir CPU üzerinde eşzamanlı olarak çalışan bir DESTROY_CQ ioctl çağrısı şunları yürütür: kref_put(&q->ip->ref, rxe_mmap_release) /* ref 1→0 */ vfree(ip->obj) /* gezinti sırasında vmalloc PTE'lerini temizler */ kfree(ip) /* rxe_mmap_info yapısını serbest bırakır */ Bu durum şunlara yol açar: 1. Çekirdek çökmesi; vfree per-PTE yarışını kazandığında vmalloc_to_page() NULL döner -> vm_insert_page(NULL) → validate_page_before_insert içinde GPF oluşur. 2. Sayfa düzeyinde UAF; vmalloc_to_page(), vfree tarafından temizlenmeden önce güncelliğini yitirmiş bir PTE okur. Kullanıcı VMA'sı, daha sonra vmalloc tarafından yeniden tahsis edilebilecek olan serbest bırakılmış bir sayfaya ait PTE'yi tutar; bu da saldırganın temiz bir sayfa düzeyinde UAF elde etmesine olanak tanır. Güçlü bir primitif nedeniyle sayfa düzeyinde UAF mümkün olsa da, çok kısa zaman penceresi (son insert_page işleminden sonra ve kref_get işleminden önce) göz önüne alındığında bunun istatistiksel olarak başarılmasının çok zor olduğu belirtilmelidir. Çağrı izleri aşağıdadır: Oops: general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] SMP KASAN NOPTI KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f] CPU: 0 UID: 1000 PID: 413 Comm: poc Not tainted 7.0.0-rc5-dirty #28 PREEMPT(lazy) Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014 RIP: 0010:validate_page_before_insert+0x32/0x300 Code: e5 41 57 41 56 49 89 fe 41 55 41 54 53 48 89 f3 e8 93 b5 a3 ff 48 8d 7b 08 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 7b 02 00 00 4c 8b 63 08 31 ff 4d 89 e5 41 83 e5 RSP: 0018:ffff88811b15f2f0 EFLAGS: 00000202 RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000 RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000008 RBP: ffff88811b15f318 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: ffff8881181eee00 R13: 0000000000000000 R14: ffff8881181eee00 R15: ffff8881181eee20 FS: 00007b1e000f76c0(0000) GS:ffff8884268e0000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007b1e00a24ac0 CR3: 0000000116eb3000 CR4: 00000000000006f0 Call Trace: <TASK> insert_page+0x8f/0x190 ? __pfx_insert_page+0x10/0x10 ? kasan_save_alloc_info+0x38/0x60 vm_insert_page+0x2e7/0x400 remap_vmalloc_range_partial+0x212/0x3e0 remap_vmalloc_range+0x6e/0xb0 ? __kasan_check_write+0x14/0x30 rxe_mmap+0x2e9/0x5d0 ib_uverbs_mmap+0x1ad/0x2c0 __mmap_region+0x12c2/0x2ad0 ? __pfx___mmap_region+0x10/0x10 ? __sanitizer_cov_trace_switch+0x58/0xb0 ? mas_prev_slot+0x360/0x39c0 ? __sanitizer_cov_trace_switch+0x58/0xb0 ? mas_next_slot+0x1e5b/0x2f40 ? __sanitizer_cov_trace_cmp8+0x18/0x30 ? unmapped_area_topdown+0x4dd/0x610 ? kfree+0x1b1/0x440 ? free_cpumask_var+0x16/0x30 ? __kasan_slab_free+0x7d/0xa0 ? __sanitizer_cov_trace_cmp8+0x18/0x30 mmap_region+0x2e6/0x3c0 do_mmap+0xa3e/0x12a0 ? __pfx_do_mmap+0x10/0x10 ? __kasan_check_write+0x14/0x30 ? down_write_killable+0xba/0x160 ? __pfx_down_write_killable+0x10/0x10 ? __sanitizer_cov_trace_cmp4+0x16/0x30 vm_mmap_pgoff+0x2d4/0x4a0 ? __pfx_vm_mmap_pgoff+0x10/0x10 ? fget+0x1bf/0x270 ksys_mmap_pgoff+0x40c/0x690 ? __sanitizer_cov_trace_const_cmp4+0x16/0x30 ? __pfx_ksys_mmap_pgoff+0x10/0x10 ? __kasan_check_write+0x14/0x30 ? _raw_spin_trylock+0xbb/0x130 ? __pfx__raw_spin_trylock+0x10/0x10 __x64_sys_mmap+0x135/0x1e0 x64_sys_c ---truncated---
Nasıl düzeltilir
- Linux Linuxb810352d0916796dabe633cdb9adee9863ab4911, aef5ea8578f97f2701039600846a8bcf5f21e863, 3371f2036e0f970166bbb624e25bba46d32fa18e, 665fb7d22a700c66a78db0cf88c6e6a649aba9d0, e038d42cc09ca1da9d3568ce8ae062b2bfb3bc0e, e59a6aa89e0fcd1d0707832eb4654fd9ae7d31e6, 3525987a392536f31a484833af258971af63b24c, 35744ab3d03c5fca8c1752f53fc8fc674e14c561 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < b810352d0916796dabe633cdb9adee9863ab4911, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < aef5ea8578f97f2701039600846a8bcf5f21e863, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < 3371f2036e0f970166bbb624e25bba46d32fa18e, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < 665fb7d22a700c66a78db0cf88c6e6a649aba9d0, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < e038d42cc09ca1da9d3568ce8ae062b2bfb3bc0e, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < e59a6aa89e0fcd1d0707832eb4654fd9ae7d31e6, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < 3525987a392536f31a484833af258971af63b24c, 8700e3e7c4857d28ebaa824509934556da0b3e76 ≤ v < 35744ab3d03c5fca8c1752f53fc8fc674e14c561, 4.8 | b810352d0916796dabe633cdb9adee9863ab4911, aef5ea8578f97f2701039600846a8bcf5f21e863, 3371f2036e0f970166bbb624e25bba46d32fa18e, 665fb7d22a700c66a78db0cf88c6e6a649aba9d0, e038d42cc09ca1da9d3568ce8ae062b2bfb3bc0e, e59a6aa89e0fcd1d0707832eb4654fd9ae7d31e6, 3525987a392536f31a484833af258971af63b24c, 35744ab3d03c5fca8c1752f53fc8fc674e14c561 |
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.