CVE-2024-41003

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: bpf: fake_reg-in reg_set_min_max korlanmasının düzəldilməsi Juan bildirib ki, buzzer [0]-da bəzi dəyişikliklər etdikdən və coverage tərəfindən yönləndirilən yeni bir fuzzing strategiyasını tətbiq etdikdən sonra, probe-lardan birində aşağıdakıları müşahidə ediblər: [...] 13: (79) r6 = *(u64 *)(r0 +0) ; R0=map_value(ks=4,vs=8) R6_w=scalar() 14: (b7) r0 = 0 ; R0_w=0 15: (b4) w0 = -1 ; R0_w=0xffffffff 16: (74) w0 >>= 1 ; R0_w=0x7fffffff 17: (5c) w6 &= w0 ; R0_w=0x7fffffff R6_w=scalar(smin=smin32=0,smax=umax=umax32=0x7fffffff,var_off=(0x0; 0x7fffffff)) 18: (44) w6 |= 2 ; R6_w=scalar(smin=umin=smin32=umin32=2,smax=umax=umax32=0x7fffffff,var_off=(0x2; 0x7ffffffd)) 19: (56) if w6 != 0x7ffffffd goto pc+1 REG INVARIANTS VIOLATION (true_reg2): range bounds violation u64=[0x7fffffff, 0x7ffffffd] s64=[0x7fffffff, 0x7ffffffd] u32=[0x7fffffff, 0x7ffffffd] s32=[0x7fffffff, 0x7ffffffd] var_off=(0x7fffffff, 0x0) REG INVARIANTS VIOLATION (false_reg1): range bounds violation u64=[0x7fffffff, 0x7ffffffd] s64=[0x7fffffff, 0x7ffffffd] u32=[0x7fffffff, 0x7ffffffd] s32=[0x7fffffff, 0x7ffffffd] var_off=(0x7fffffff, 0x0) REG INVARIANTS VIOLATION (false_reg2): const tnum out of sync with range bounds u64=[0x0, 0xffffffffffffffff] s64=[0x8000000000000000, 0x7fffffffffffffff] u32=[0x0, 0xffffffff] s32=[0x80000000, 0x7fffffff] var_off=(0x7fffffff, 0x0) 19: R6_w=0x7fffffff 20: (95) exit from 19 to 21: R0=0x7fffffff R6=scalar(smin=umin=smin32=umin32=2,smax=umax=smax32=umax32=0x7ffffffe,var_off=(0x2; 0x7ffffffd)) R7=map_ptr(ks=4,vs=8) R9=ctx() R10=fp0 fp-24=map_ptr(ks=4,vs=8) fp-40=mmmmmmmm 21: R0=0x7fffffff R6=scalar(smin=umin=smin32=umin32=2,smax=umax=smax32=umax32=0x7ffffffe,var_off=(0x2; 0x7ffffffd)) R7=map_ptr(ks=4,vs=8) R9=ctx() R10=fp0 fp-24=map_ptr(ks=4,vs=8) fp-40=mmmmmmmm 21: (14) w6 -= 2147483632 ; R6_w=scalar(smin=umin=umin32=2,smax=umax=0xffffffff,smin32=0x80000012,smax32=14,var_off=(0x2; 0xfffffffd)) 22: (76) if w6 s>= 0xe goto pc+1 ; R6_w=scalar(smin=umin=umin32=2,smax=umax=0xffffffff,smin32=0x80000012,smax32=13,var_off=(0x2; 0xfffffffd)) 23: (95) exit from 22 to 24: R0=0x7fffffff R6_w=14 R7=map_ptr(ks=4,vs=8) R9=ctx() R10=fp0 fp-24=map_ptr(ks=4,vs=8) fp-40=mmmmmmmm 24: R0=0x7fffffff R6_w=14 R7=map_ptr(ks=4,vs=8) R9=ctx() R10=fp0 fp-24=map_ptr(ks=4,vs=8) fp-40=mmmmmmmm 24: (14) w6 -= 14 ; R6_w=0 [...] Burada 19-cu sətirdə registrin invariant pozuntusu görünür. 18-ci sətirdəki binary-or əməliyyatından sonra verifier bilir ki, 2-ci bit təyin edilib, lakin map value-dan yüklənmiş qalan məzmun haqqında heç nə bilmir, yəni diapazon [2,0x7fffffff], var_off=(0x2; 0x7ffffffd)-dir. Verifier 19-cu sətirdə budaqlaşmanı analiz etdikdə, reg_set_min_max() funksiyasında registrlərin vəziyyətini doğru budağın registrlərinə (true_reg1, true_reg2) və yanlış budağın registrlərinə (false_reg1, false_reg2) bölür. Test w6 != 0x7ffffffd olduğu üçün src_reg məlum sabitdir. Daxili olaraq verifier 0x7ffffffd dəyəri ilə scalar kimi başladılmış "saxta" (fake) registr yaradır və onu reg_set_min_max()-a ötürür. İndi, 19-cu sətir üçün bu proqramın yanlış budağına girmək riyazi cəhətdən qeyri-mümkündür, lakin verifier onu analiz edir. Bu qeyri-mümkündür, çünki əvvəlki 'or' əməliyyatı səbəbindən r6-nın ikinci biti təyin olunacaq, şərtlərdəki sabitdə isə həmin bit təyin edilməyib (hex(fd) == binary(1111 1101)). Verifier ilk dəfə yanlış / keçid budağını analiz etdikdə, r6-nın var_off-u ilə sabit arasındakı kəsişməni hesablayacaq. Bunun səbəbi verifier-in sabitin dəyəri ilə başladılmış "saxta" registr yaratmasıdır. Kəsişmə nəticəsi daha sonra regs_refine_cond_op() funksiyasında hər iki registri təkmilləşdirir: [...] t = tnum_intersect(tnum_subreg(reg1->var_off), tnum_subreg(reg2->var_off)); reg1->var_o ---kəsilmiş---

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc12 iyl 2024
İlk görülmə12 iyl 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.9.7 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel6.8 ≤ v < 6.9.7, 6.106.9.7

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-2024-41003 · Linux Kernel · Dark Radar