CVE-2023-53645
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: bpf: Sahib olmayan istinadlar üçün bpf_refcount_acquire funksiyasının uğursuz ola bilməsi təmin edilsin Bu yamaq orijinal bpf_refcount seriyasında [0] edilən yanlış fərziyyəti düzəldir; konkret olaraq, müəyyən bir düyün üzərində bpf_refcount_acquire çağıran BPF proqramının həmin düyünün aktiv olduğunu hər zaman təmin edə biləcəyi fərziyyətini. Həmin seriyada rbtree_add və list_push_{front, back} funksiyalarına uğursuzluq davranışını əlavə edən yamaq sahib olmayan istinadlar üçün bu fərziyyəti pozur. Aşağıdakı proqrama nəzər salın: n = bpf_kptr_xchg(&mapval, NULL); /* xəta yoxlaması ötürülür */ bpf_spin_lock(&l); if(bpf_rbtree_add(&t, &n->rb, less)) { bpf_refcount_acquire(n); /* Əlavə etmək uğursuz oldu, düyünlə başqa bir şey edin */ } bpf_spin_unlock(&l); Bu ssenaridə bpf_refcount_acquire funksiyasının hər zaman uğurlu olacağını fərz etmək yanlışdır. Burada bpf_refcount_acquire kritik bölmədə çağırılır, lakin tutulan kilid rbtree t ilə əlaqəlidir ki, bu da mütləq şəkildə düyünün artıq yerləşdiyi ağacla əlaqəli olan kilid deyil. Beləliklə, bpf_rbtree_add düyünü əlavə edə bilmədikdən və onun daxilində bpf_obj_drop çağırdıqdan sonra, proqramın düyünün ömrü üzərində heç bir sahibi hökmü qalmır. Buna görə də, uğursuz rbtree_add-dən sonra istənilən vaxt düyünün refcount-u 0-a endirilə bilər. Əgər bu, yuxarıdakı refcount_acquire-dan əvvəl baş verərsə, düyün azad edilə bilər və hər iki halda refcount_acquire 0 olan refcount-u artıracaqdır. Seriyanın sonrakı yamaqları bu ssenarini işə salır və nəticədə kernel-dən gözlənilən xəbərdarlıq alınır (bu yamağın dəyişiklikləri olmadan): refcount_t: addition on 0; use-after-free. WARNING: CPU: 1 PID: 207 at lib/refcount.c:25 refcount_warn_saturate+0xbc/0x110 Modules linked in: bpf_testmod(O) CPU: 1 PID: 207 Comm: test_progs Tainted: G O 6.3.0-rc7-02231-g723de1a718a2-dirty #371 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org 04/01/2014 RIP: 0010:refcount_warn_saturate+0xbc/0x110 Code: 6f 64 f6 02 01 e8 84 a3 5c ff 0f 0b eb 9d 80 3d 5e 64 f6 02 00 75 94 48 c7 c7 e0 13 d2 82 c6 05 4e 64 f6 02 01 e8 64 a3 5c ff <0f> 0b e9 7a ff ff ff 80 3d 38 64 f6 02 00 0f 85 6d ff ff ff 48 c7 RSP: 0018:ffff88810b9179b0 EFLAGS: 00010082 RAX: 0000000000000000 RBX: 0000000000000002 RCX: 0000000000000000 RDX: 0000000000000202 RSI: 0000000000000008 RDI: ffffffff857c3680 RBP: ffff88810027d3c0 R08: ffffffff8125f2a4 R09: ffff88810b9176e7 R10: ffffed1021722edc R11: 746e756f63666572 R12: ffff88810027d388 R13: ffff88810027d3c0 R14: ffffc900005fe030 R15: ffffc900005fe048 FS: 00007fee0584a700(0000) GS:ffff88811b280000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00005634a96f6c58 CR3: 0000000108ce9002 CR4: 0000000000770ee0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 PKRU: 55555554 Call Trace: <TASK> bpf_refcount_acquire_impl+0xb5/0xc0 (çıxışın qalan hissəsi kəsilmişdir) Yamaq bunu bpf_refcount_acquire_impl funksiyasını refcount_inc əvəzinə refcount_inc_not_zero istifadə edəcək şəkildə dəyişdirərək və bpf_refcount_acquire funksiyasını KF_RET_NULL kimi qeyd edərək həll edir. Lakin sahib olduğumuz istinadlar üçün yuxarıdakı ssenarinin mümkün olmadığını və buna görə də bpf_refcount_acquire funksiyasının hər zaman uğurlu olacağını bilirik. Verifikatora bpf_refcount_acquire çağırışları üçün "giriş sahib istinadıdır?" məlumatını izləmək üçün bəzi uçot mexanizmləri əlavə edilmişdir və bpf_refcount_acquire KF_RET_NULL kimi qeyd olunsa da, sahib istinadlar üçün is_kfunc_ret_null funksiyası false qaytarır. bpf_refcount_acquire istifadə edən mövcud özünüyoxlama testləri (selftests), geri dönüş dəyərini NULL-a yoxlamaq üçün lazım olan yerlərdə dəyişdirilmişdir. [0]: https://lore.kernel.org/bpf/[email protected]/
Necə düzəltmək olar
- linux linux_kernel6.4.4 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.4 ≤ v < 6.4.4 | 6.4.4 |
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.