CVE-2024-47702
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: bpf: paket data/data_end/data_meta üçün işarə genişləndirməsinin verifikasiyası uğursuz olur syzbot, commit 1f1e864b6555 ("bpf: Handle sign-extenstin ctx member accesses") səbəbindən kernel çöküşü hesabat etmişdir. Bunun səbəbi paket data/data_end/data_meta uapi sahələri üçün 32-bit yükləmənin işarə genişləndirilməsidir (sign-extension). Orijinal kod belə görünür: r2 = *(s32 *)(r1 + 76) /* load __sk_buff->data */ r3 = *(u32 *)(r1 + 80) /* load __sk_buff->data_end */ r0 = r2 r0 += 8 if r3 > r0 goto +1 ... Qeyd edin ki, __sk_buff->data yükləməsi 32-bit işarə genişləndirməsinə malikdir. Verifikasiya və convert_ctx_accesses() funksiyasından sonra yekun asm kodu belə görünür: r2 = *(u64 *)(r1 +208) r2 = (s32)r2 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 ... Qeyd edin ki, 'r2 = (s32)r2' əməliyyatı kernel __sk_buff->data ünvanını etibarsız edə bilər ki, bu da runtime xətasına səbəb ola bilər. Hazırda C kodunda adətən belə yazılır: void *data = (void *)(long)skb->data; void *data_end = (void *)(long)skb->data_end; ... və bu, aşağıdakıları generasiya edir: r2 = *(u64 *)(r1 +208) r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 Əgər biz işarə genişləndirməsinə icazə versək, void *data = (void *)(long)(int)skb->data; void *data_end = (void *)(long)skb->data_end; ... generasiya olunan kod belə görünür: r2 = *(u64 *)(r1 +208) r2 <<= 32 r2 s>>= 32 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 və bu, verifikasiyanın uğursuz olmasına səbəb olacaq, çünki "r2" paket göstəricisi olduğu üçün "r2 <<= 32" əməliyyatına icazə verilmir. Bu problemi r2 = *(s32 *)(r1 + 76) /* load __sk_buff->data */ halı üçün həll etmək məqsədilə, bu yamaq (patch) paket data/data_end/data_meta girişləri üçün is_valid_access() geri çağırış funksiyasına əlavə yoxlamalar əlavə etdi. Əgər bu girişlər işarə genişləndirməsi ilədirsə, verifikasiya uğursuz olacaq. [1] https://lore.kernel.org/bpf/[email protected]/
Necə düzəltmək olar
- linux linux_kernel6.10.13, 6.11.2 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 | 6.6 ≤ v < 6.10.13, 6.11 ≤ v < 6.11.2 | 6.10.13, 6.11.2 |
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.