CVE-2022-49888
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: arm64: entry: kprobe rekursiyasının qarşısını alın cortex_a76_erratum_1463225_debug_handler() funksiyası debug istisnaları (və BRK təlimatlarından yaranan sinxron istisnalar) emal edilərkən çağırılır və buna görə də zondlanmış funksiya icra olunduqda çağırılır. Əgər kompilyator cortex_a76_erratum_1463225_debug_handler() funksiyasını inline etmirsə, o, zondlana bilər. Əgər cortex_a76_erratum_1463225_debug_handler() zondlanarsa, hər hansı debug istisnası və ya proqram təminatı breakpoint istisnası rekursiv istisnalara səbəb olaraq yığın daşmasına gətirib çıxaracaq. Bu, ftrace multiple_probes özünütesti ilə tetiklənə bilər və aşağıdakı nümunə splat-da göstərildiyi kimi. Bu, aşağıdakı commit nəticəsində yaranan reqressiyadır: 6459b8469753e9fe ("arm64: entry: consolidate Cortex-A76 erratum 1463225 workaround") ... hansı ki, funksiya ilə əlaqəli NOKPROBE_SYMBOL() annotasiyasını silmişdi. Mənim niyyətim cortex_a76_erratum_1463225_debug_handler() funksiyasının onun çağıranı olan el1_dbg() funksiyasına inline edilməsi idi; el1_dbg() noinstr kimi işarələnib və zondlana bilməz. Bunu təmin etmək üçün cortex_a76_erratum_1463225_debug_handler() funksiyasını __always_inline kimi işarələyin. Bu yamadan əvvəlki nümunə splat (rekursiv girişlər buraxılmışdır): | # echo p cortex_a76_erratum_1463225_debug_handler > /sys/kernel/debug/tracing/kprobe_events | # echo p do_el0_svc >> /sys/kernel/debug/tracing/kprobe_events | # echo 1 > /sys/kernel/debug/tracing/events/kprobes/enable | Insufficient stack space to handle exception! | ESR: 0x0000000096000047 -- DABT (current EL) | FAR: 0xffff800009cefff0 | Task stack: [0xffff800009cf0000..0xffff800009cf4000] | IRQ stack: [0xffff800008000000..0xffff800008004000] | Overflow stack: [0xffff00007fbc00f0..0xffff00007fbc10f0] | CPU: 0 PID: 145 Comm: sh Not tainted 6.0.0 #2 | Hardware name: linux,dummy-virt (DT) | pstate: 604003c5 (nZCv DAIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--) | pc : arm64_enter_el1_dbg+0x4/0x20 | lr : el1_dbg+0x24/0x5c | sp : ffff800009cf0000 | x29: ffff800009cf0000 x28: ffff000002c74740 x27: 0000000000000000 | x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000 | x23: 00000000604003c5 x22: ffff80000801745c x21: 0000aaaac95ac068 | x20: 00000000f2000004 x19: ffff800009cf0040 x18: 0000000000000000 | x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 | x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 | x11: 0000000000000010 x10: ffff800008c87190 x9 : ffff800008ca00d0 | x8 : 000000000000003c x7 : 0000000000000000 x6 : 0000000000000000 | x5 : 0000000000000000 x4 : 0000000000000000 x3 : 00000000000043a4 | x2 : 00000000f2000004 x1 : 00000000f2000004 x0 : ffff800009cf0040 | Kernel panic - not syncing: kernel stack overflow | CPU: 0 PID: 145 Comm: sh Not tainted 6.0.0 #2 | Hardware name: linux,dummy-virt (DT) | Call trace: | dump_backtrace+0xe4/0x104 | show_stack+0x18/0x4c | dump_stack_lvl+0x64/0x7c | dump_stack+0x18/0x38 | panic+0x14c/0x338 | test_taint+0x0/0x2c | panic_bad_stack+0x104/0x118 | handle_bad_stack+0x34/0x48 | __bad_stack+0x78/0x7c | arm64_enter_el1_dbg+0x4/0x20 | el1h_64_sync_handler+0x40/0x98 | el1h_64_sync+0x64/0x68 | cortex_a76_erratum_1463225_debug_handler+0x0/0x34 ... | el1h_64_sync_handler+0x40/0x98 | el1h_64_sync+0x64/0x68 | cortex_a76_erratum_1463225_debug_handler+0x0/0x34 ... | el1h_64_sync_handler+0x40/0x98 | el1h_64_sync+0x64/0x68 | cortex_a76_erratum_1463225_debug_handler+0x0/0x34 | el1h_64_sync_handler+0x40/0x98 | el1h_64_sync+0x64/0x68 | do_el0_svc+0x0/0x28 | el0t_64_sync_handler+0x84/0xf0 | el0t_64_sync+0x18c/0x190 | Kernel Offset: disabled | CPU features: 0x0080,00005021,19001080 | Memory Limit: none | ---[ end Kernel panic - not syncing: kernel stack overflow ]--- Bu yama ilə cortex_a76_erratum_1463225_debug_handler() funksiyası el1_dbg() funksiyasına inline edilir və el1_dbg() zondlana bilməz: | # echo p cortex_a76_erratum_1463225_debug_handler > /sys/kernel/debug/tracing/kprobe_events | sh: write error: No such file or directory | # grep -w cortex_a76_errat ---truncated---
Necə düzəltmək olar
- linux linux_kernel5.15.78, 6.0.8 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 | 5.12 ≤ v < 5.15.78, 5.16 ≤ v < 6.0.8, 6.1 | 5.15.78, 6.0.8 |
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.