CVE-2024-47706
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: block, bfq: birləşmə zənciri ilə bfqq->bic üçün mümkün olan UAF (istifadə-dən sonra azad etmə) xətası düzəldildi 1) ilkin vəziyyət, üç tapşırıq: Proses 1 Proses 2 Proses 3 (BIC1) (BIC2) (BIC3) | Λ | Λ | Λ | | | | | | V | V | V | bfqq1 bfqq2 bfqq3 proses istinadı: 1 1 1 2) bfqq1, bfqq2 ilə birləşdirilir: Proses 1 Proses 2 Proses 3 (BIC1) (BIC2) (BIC3) | | | Λ \--------------\| | | V V | bfqq1--------->bfqq2 bfqq3 proses istinadı: 0 2 1 3) bfqq2, bfqq3 ilə birləşdirilir: Proses 1 Proses 2 Proses 3 (BIC1) (BIC2) (BIC3) burada -> Λ | | \--------------\ \-------------\| V V bfqq1--------->bfqq2---------->bfqq3 proses istinadı: 0 1 3 Bu halda Proses 1-dən gələn IO əvvəlcə BIC1 vasitəsilə bfqq2-ni alacaq, sonra birləşmə zənciri vasitəsilə bfqq3-ü əldə edəcək və nəticədə IO bfqq3 tərəfindən idarə olunacaq. Lakin mövcud kod, ilkin vəziyyətdə olduğu kimi, bfqq2-nin BIC1-ə məxsus olduğunu düşünür və bfqq2->bic dəyərini BIC1 olaraq təyin edir. bfq_insert_request -> Proses 1 tərəfindən bfqq = bfq_init_rq(rq) bfqq = bfq_get_bfqq_handle_split bfqq = bic_to_bfqq -> BIC1-dən bfqq2 alınır bfqq->ref++ rq->elv.priv[0] = bic rq->elv.priv[1] = bfqq if (bfqq_process_refs(bfqq) == 1) bfqq->bic = bic -> BIC1, bfqq2-də qeyd edilir __bfq_insert_request new_bfqq = bfq_setup_cooperator -> bfqq2->new_bfqq-dan bfqq3 alınır bfqq_request_freed(bfqq) new_bfqq->ref++ rq->elv.priv[1] = new_bfqq -> IO bfqq3 tərəfindən idarə olunur Problem, ilk öncə bfqq-nun birləşmə zəncirindən olub-olmadığı yoxlanılaraq həll edilmişdir. Bu həmçinin bizim syzkaller tərəfindən bildirilən (təkrar istehsal edilə bilməyən) aşağıdakı problemi də həll edə bilər: ================================================================== BUG: KASAN: slab-use-after-free in bfq_do_early_stable_merge block/bfq-iosched.c:5692 [inline] BUG: KASAN: slab-use-after-free in bfq_do_or_sched_stable_merge block/bfq-iosched.c:5805 [inline] BUG: KASAN: slab-use-after-free in bfq_get_queue+0x25b0/0x2610 block/bfq-iosched.c:5889 Write of size 1 at addr ffff888123839eb8 by task kworker/0:1H/18595 CPU: 0 PID: 18595 Comm: kworker/0:1H Tainted: G L 6.6.0-07439-gba2303cacfda #6 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014 Workqueue: kblockd blk_mq_requeue_work Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x91/0xf0 lib/dump_stack.c:106 print_address_description mm/kasan/report.c:364 [inline] print_report+0x10d/0x610 mm/kasan/report.c:475 kasan_report+0x8e/0xc0 mm/kasan/report.c:588 bfq_do_early_stable_merge block/bfq-iosched.c:5692 [inline] bfq_do_or_sched_stable_merge block/bfq-iosched.c:5805 [inline] bfq_get_queue+0x25b0/0x2610 block/bfq-iosched.c:5889 bfq_get_bfqq_handle_split+0x169/0x5d0 block/bfq-iosched.c:6757 bfq_init_rq block/bfq-iosched.c:6876 [inline] bfq_insert_request block/bfq-iosched.c:6254 [inline] bfq_insert_requests+0x1112/0x5cf0 block/bfq-iosched.c:6304 blk_mq_insert_request+0x290/0x8d0 block/blk-mq.c:2593 blk_mq_requeue_work+0x6bc/0xa70 block/blk-mq.c:1502 process_one_work kernel/workqueue.c:2627 [inline] process_scheduled_works+0x432/0x13f0 kernel/workqueue.c:2700 worker_thread+0x6f2/0x1160 kernel/workqueue.c:2781 kthread+0x33c/0x440 kernel/kthread.c:388 ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:305 </TASK> Allocated by task 20776: kasan_save_stack+0x20/0x40 mm/kasan/common.c:45 kasan_set_track+0x25/0x30 mm/kasan/common.c:52 __kasan_slab_alloc+0x87/0x90 mm/kasan/common.c:328 kasan_slab_alloc include/linux/kasan.h:188 [inline] slab_post_alloc_hook mm/slab.h:763 [inline] slab_alloc_node mm/slub.c:3458 [inline] kmem_cache_alloc_node+0x1a4/0x6f0 mm/slub.c:3503 ioc_create_icq block/blk-ioc.c:370 [inline] ---truncated---
Necə düzəltmək olar
- linux linux_kernel5.10.227, 5.15.168, 6.1.113, 6.6.54, 6.10.13, 6.11.2 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 | 4.12 ≤ v < 5.10.227, 5.11 ≤ v < 5.15.168, 5.16 ≤ v < 6.1.113, 6.2 ≤ v < 6.6.54, 6.7 ≤ v < 6.10.13, 6.11 ≤ v < 6.11.2 | 5.10.227, 5.15.168, 6.1.113, 6.6.54, 6.10.13, 6.11.2 |
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.