CVE-2023-52828
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: bpf: IP == ksym.end vəziyyətinin BPF proqramının bir hissəsi kimi aşkarlanması İndi ki bpf_throw kfunc verifikator daxilində noreturn semantikasına malik ilk belə çağırış təlimatıdır, bu, həmçinin ölü kodun aradan qaldırılmasını görünməmiş şəkildə işə salır. Birincisi, bpf_throw çağırışından sonra gələn istənilən təlimat heç vaxt görülmüş kimi işarələnməyəcək. Bundan əlavə, əgər çağırış zənciri nəticədə throw edirsə, çağıranlarda nəticədə throw edən alt proqrama aparan çağırış təlimatından sonra gələn istənilən təlimatlar da heç vaxt görülmüş kimi işarələnməyəcək. Bunu düzəltməyin cəlbedici yolu proqramın jited_len dəyərini artıran əlavə 'int3' təlimatları yaymaq və iş vaxtı ərzində proqram throw etdikdə, hətta bpf_throw-a (və ya həmişə throw edən alt proqramlara) çağırış təlimatı proqramda son təlimat kimi yayılsa belə, onun sərhədlərini aşkar edə bilməyimizi təmin etməkdir. Belə bir proqrama nümunə aşağıdakı kimi olardı: do_something(): ... r0 = 0 exit foo(): r1 = 0 call bpf_throw r0 = 0 exit bar(cond): if r1 != 0 goto pc+2 call do_something exit call foo r0 = 0 // Verifikator tərəfindən heç vaxt görülmür exit // main(ctx): r1 = ... call bar r0 = 0 exit Burada, əgər nəticədə throw etsək, stacktrace aşağıdakı kimi olardı: bpf_throw foo bar main bar daxilində yayılan son təlimat foo-ya çağırış olacaq, buna görə də qayıdış ünvanı sonrakı təlimat olacaq (JIT onu x86-də int3 kimi yayır). Bu, proqramın jited_len dəyərindən kənarda qalacaq, beləliklə, açarkən qayıdış ünvanının hər hansı proqrama aid olduğunu aşkar edə bilməyəcəyik və heç vaxt gözləmədiyimiz BPF proqramlarının etibarsız stack açılması səbəbindən panic vəziyyətinə düşəcəyik. Bu halı aradan qaldırmaq üçün bpf_prog_ksym_find funksiyası IP == ksym.end vəziyyətini BPF proqramının bir hissəsi kimi qəbul etsin ki, belə hal baş verdikdə is_bpf_text_address true qaytarsın və son təlimat çağırış təlimatı olduqda etibarlı şəkildə aça bilək.
Necə düzəltmək olar
- linux linux_kernel5.10.202, 5.15.140, 6.1.64, 6.5.13, 6.6.3 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 | v < 5.10.202, 5.11 ≤ v < 5.15.140, 5.16 ≤ v < 6.1.64, 6.2 ≤ v < 6.5.13, 6.6 ≤ v < 6.6.3 | 5.10.202, 5.15.140, 6.1.64, 6.5.13, 6.6.3 |
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.