CVE-2022-49961

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: bpf: ARG_CONST_ALLOC_SIZE_OR_ZERO üçün mark_chain_precision tətbiq edilsin ARG_CONST_* tipli arqument olduqda dəqiqlik markerləri ötürülməlidir, çünki belə arqumentlər geri qaytarılan dəyəri təkmilləşdirdiyi halda (bu nümunədə PTR_TO_MEM üçün mem_size təyin etdikdə), verifikator states_equal yoxlaması məqsədilə qeyri-dəqiq skalyarları ekvivalent hesab edə bilmir. R0 üçün nəticəvi mem_size sabit dəyərdən törəyir və əgər verifikator belə arqumentlərin mövcud olduğu hallarda vəziyyətləri ekvivalent hesab edərək yanlış şəkildə kəssə (hər iki registrdə regsafe daxilində reg->precise dəyərinin false olduğunu görərək), biz verifikatordan keçən, lakin həmin araşdırılan vəziyyətdə düzgün mem_size limitini aşan girişlər edə bilən etibarsız proqramlarla qarşılaşa bilərik. Problemin konkret nümunəsi: 0000000000000000 <prog>: 0: r2 = *(u32 *)(r1 + 80) 1: r1 = *(u32 *)(r1 + 76) 2: r3 = r1 3: r3 += 4 4: if r3 > r2 goto +18 <LBB5_5> 5: w2 = 0 6: *(u32 *)(r1 + 0) = r2 7: r1 = *(u32 *)(r1 + 0) 8: r2 = 1 9: if w1 == 0 goto +1 <LBB5_3> 10: r2 = -1 0000000000000058 <LBB5_3>: 11: r1 = 0 ll 13: r3 = 0 14: call bpf_ringbuf_reserve 15: if r0 == 0 goto +7 <LBB5_5> 16: r1 = r0 17: r1 += 16777215 18: w2 = 0 19: *(u8 *)(r1 + 0) = r2 20: r1 = r0 21: r2 = 0 22: call bpf_ringbuf_submit 00000000000000b8 <LBB5_5>: 23: w0 = 0 24: exit Birinci halda, tək sətirlik icranın araşdırılması zamanı 9-cu budaq təlimatının ikinci ayağı üçün axtarış 14-cü təlimatda kəsiləcək, çünki o, ilk öncə r2 = -1 (UINT_MAX) ilə yoxlanılacaq, halbuki 9-cu təlimatda w1 hər zaman 0 olacağı üçün iş vaxtında bpf_ringbuf_reserve-dən UINT_MAX/4-dən böyük olduğu üçün xəta almayacağıq. Verifikator regsafe zamanı hər iki vəziyyətdə hər iki r2 registri üçün reg->precise dəyərini false kimi görür, buna görə də onları states_equal məqsədləri üçün bərabər hesab edir. Əgər biz backtrack dəstəyi vasitəsilə dəqiq markerləri ötürsəydik, köhnə r2-nin (UINT_MAX) yeni r2 (1) daxilində olduğundan əmin olmaq üçün dəqiq markalanmadan istifadə edərdik və bu heç vaxt doğru olmazdı, beləliklə verifikasiya haqlı olaraq uğursuz olardı. Nəticə etibarilə, bu düzəliş olmadan 19-cu təlimatdakı sərhədləri aşan girişə (out of bounds access) icazə verilərdi. Qeyd edin ki, istifadəçinin CAP_BPF imtiyazı olmadıqda (və ya subprog sayı 1-dən çox olduqda, yəni hər hansı statik və ya qlobal funksiyalardan istifadə edildikdə) reg->precise həmişə true təyin edilir, buna görə də bu yalnız dəqiqlik markerlərinin açıq şəkildə ötürülməsi lazım olduqda (yəni CAP_BPF imtiyazına malik imtiyazlı istifadəçilər üçün) problem yaradır. Gələcəkdə reqressiyaların qarşısını almaq üçün növbəti yamaya sadələşdirilmiş test halı əlavə edilmişdir.

CiddilikYüksək
CVSS7.1
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc18 iyn 2025
İlk görülmə18 iyn 2025

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.8 ≤ v < 5.19.8, 6.05.19.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.

Intelligence 360 paketində

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.

CVE-2022-49961 · Linux Kernel · Dark Radar