CVE-2022-50069
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: BPF: bpf_sys_bpf() fonksiyonundaki potansiyel hatalı işaretçi referansı düzeltildi bpf_sys_bpf() yardımcı fonksiyonu, bir eBPF programının çekirdek içerisinden başka bir eBPF programını yüklemesine olanak tanır. Bu durumda, argüman union bpf_attr işaretçisi (ve içindeki insns ve license işaretçileri), standart bir bpf() sistem çağrısının aksine kullanıcı alanı adresi yerine bir çekirdek adresidir. Sistem çağrısındaki bellek kopyalama işleminin her iki durumda da çalışmasını sağlamak için, işaretçiyi sarmalamak ve kaynağını ayırt etmek amacıyla bpfptr_t tanıtılmıştır. Özellikle, bir bpfptr_t üzerinden bellek içeriği kopyalanırken, kullanıcı alanı adresi durumunda copy_from_user(), çekirdek adresi durumunda ise memcpy() işlemi gerçekleştirilir. Çekirdek içi işaretçinin geçerliliği hiçbir zaman kontrol edilmediği için bu durum sorunlara yol açabilir. Sorun, bir eBPF sistem çağrısı programının bir program yüklemek için bpf_sys_bpf() fonksiyonunu çağırmaya çalıştığında ancak bpf_attr union yapısında hatalı bir insns işaretçisi (örneğin 0xdeadbeef) sağladığında ortaya çıkar. Yardımcı fonksiyon, ardından programı yüklemek için bpf_prog_load() fonksiyonunu çağıracak olan __sys_bpf() fonksiyonunu çağırır. bpf_prog_load(), eBPF talimatlarını program için yeni tahsis edilen belleğe kopyalamaktan sorumludur; insns için bir çekirdek bpfptr_t oluşturur ve copy_from_bpfptr() fonksiyonunu çağırır. Dahili olarak tüm bpfptr_t işlemleri, copy_from/strncpy_from işlemleri için çekirdek işaretçileri üzerinde doğrudan memcpy() gerçekleştiren ilgili sockptr_t işlemleri tarafından desteklenmektedir. Bu nedenle kod, yönetilemeyen bir sayfa hatasını (page fault) ve dolayısıyla bir "oops" durumunu tetiklemek için hatalı işaretçiye referans vermekten kaçınmaz. Ancak bunun gerçekleşmemesi gerekir çünkü o noktada eBPF programı zaten doğrulanmıştır ve bir bellek hatasına neden olmamalıdır. Örnek KASAN izi: [ 25.685056][ T228] ================================================================== [ 25.685680][ T228] BUG: KASAN: user-memory-access in copy_from_bpfptr+0x21/0x30 [ 25.686210][ T228] Read of size 80 at addr 00000000deadbeef by task poc/228 [ 25.686732][ T228] [ 25.686893][ T228] CPU: 3 PID: 228 Comm: poc Not tainted 5.19.0-rc7 #7 [ 25.687375][ T228] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS d55cb5a 04/01/2014 [ 25.687991][ T228] Call Trace: [ 25.688223][ T228] <TASK> [ 25.688429][ T228] dump_stack_lvl+0x73/0x9e [ 25.688747][ T228] print_report+0xea/0x200 [ 25.689061][ T228] ? copy_from_bpfptr+0x21/0x30 [ 25.689401][ T228] ? _printk+0x54/0x6e [ 25.689693][ T228] ? _raw_spin_lock_irqsave+0x70/0xd0 [ 25.690071][ T228] ? copy_from_bpfptr+0x21/0x30 [ 25.690412][ T228] kasan_report+0xb5/0xe0 [ 25.690716][ T228] ? copy_from_bpfptr+0x21/0x30 [ 25.691059][ T228] kasan_check_range+0x2bd/0x2e0 [ 25.691405][ T228] ? copy_from_bpfptr+0x21/0x30 [ 25.691734][ T228] memcpy+0x25/0x60 [ 25.692000][ T228] copy_from_bpfptr+0x21/0x30 [ 25.692328][ T228] bpf_prog_load+0x604/0x9e0 [ 25.692653][ T228] ? cap_capable+0xb4/0xe0 [ 25.692956][ T228] ? security_capable+0x4f/0x70 [ 25.693324][ T228] __sys_bpf+0x3af/0x580 [ 25.693635][ T228] bpf_sys_bpf+0x45/0x240 [ 25.693937][ T228] bpf_prog_f0ec79a5a3caca46_bpf_func1+0xa2/0xbd [ 25.694394][ T228] bpf_prog_run_pin_on_cpu+0x2f/0xb0 [ 25.694756][ T228] bpf_prog_test_run_syscall+0x146/0x1c0 [ 25.695144][ T228] bpf_prog_test_run+0x172/0x190 [ 25.695487][ T228] __sys_bpf+0x2c5/0x580 [ 25.695776][ T228] __x64_sys_bpf+0x3a/0x50 [ 25.696084][ T228] do_syscall_64+0x60/0x90 [ 25.696393][ T228] ? fpregs_assert_state_consistent+0x50/0x60 [ 25.696815][ T228] ? exit_to_user_mode_prepare+0x36/0xa0 [ 25.697202][ T228] ? syscall_exit_to_user_mode+0x20/0x40 [ 25.697586][ T228] ? do_syscall_64+0x6e/0x90 [ 25.697899][ T228] entry_SYSCALL_64_after_hwframe+0x63/0xcd [ 25.698312][ T228] RIP: 0033:0x7f6d543fb759 [ 25.698624][ T228] Code: 08 5b 89 e8 5d c3 66 2e 0f 1f 84 00 00 00 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d ---truncated---
Nasıl düzeltilir
- linux linux_kernel5.15.63, 5.19.4 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.14 ≤ v < 5.15.63, 5.16 ≤ v < 5.19.4 | 5.15.63, 5.19.4 |
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.