CVE-2023-52894

Orta

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: usb: gadget: f_ncm: ncm_bitrate() funksiyasında potensial NULL göstəricisinin istifadəsi (NULL ptr deref) düzəldildi Google daxili xətası 265639009-da, aarch64 GKI 5.10.149-android13 işlədən cihazdan hələ ki təkrar istehsal edilə bilməyən çöküş hesabatı almışıq. Məlumatıma görə mənbə kodu buradadır: https://android.googlesource.com/kernel/common/+/refs/tags/ASB-2022-12-05_13-5.10 Çağırış stekidir: ncm_close() -> ncm_notify() -> ncm_do_notify() çöküş isə burada baş verir: ncm_do_notify+0x98/0x270 Kod: 79000d0b b9000a6c f940012a f9400269 (b9405d4b) Hesab etdiyim kimi, bu kod belə disassemble olunur (ARM assembly-ni bilmirəm, lakin mənə kifayət qədər məntiqli görünür...): // ehtimal ki, event->wLength-ə (struct usb_cdc_notification strukturunun 6-cı ofsetində) yarım-söz (16-bit) yazılması 0B 0D 00 79 strh w11, [x8, #6] // ehtimal ki, req->Length-ə (struct usb_request strukturunun 8-ci ofsetində) söz (32-bit) yazılması 6C 0A 00 B9 str w12, [x19, #8] // x10 (NULL), burada valid göstərici olan x9-un 0-cı ofsetindən oxundu // Mənim fikrimcə biz 'cdev->gadget'-i oxuyuruq və NULL alırıq // gadget həqiqətən də struct usb_composite_dev strukturunun 0-cı ofsetindədir 2A 01 40 F9 ldr x10, [x9] // struct usb_request strukturunun 0-cı ofsetində yerləşən req->buf göstəricisinin yüklənməsi 69 02 40 F9 ldr x9, [x19] // x10 null-dur, çöküş baş verir, görünür ki, cdev->gadget->max_speed oxumağa cəhd edilir 4B 5D 40 B9 ldr w11, [x10, #0x5c] Bu, ncm_do_notify() funksiyasının NCM_NOTIFY_SPEED case hissəsindəki kod fraqmenti ilə uyğun gəlir: event->wLength = cpu_to_le16(8); req->length = NCM_STATUS_BYTECOUNT; /* SPEED_CHANGE məlumatları bit/sananiyə ilə yuxarı/aşağı sürətlərdir */ data = req->buf + sizeof *event; data[0] = cpu_to_le32(ncm_bitrate(cdev->gadget)); Registrlərin təhlili və NULL göstəricisinin istifadəsi səbəbindən baş verən çöküş ofseti (Virtual ünvan 000000000000005c-də kernel NULL pointer dereference emal edile bilmədi) güclü şəkildə göstərir ki, çöküş aşağıdakı sətir icra edilərkən 'cdev->gadget'-in NULL olması səbəbindən baş verir: data[0] = cpu_to_le32(ncm_bitrate(cdev->gadget)); hansı ki, bunu çağırır: ncm_bitrate(NULL) o isə növbəti olaraq bunu çağırır: gadget_is_superspeed(NULL) hansı ki, bunu oxuyur: ((struct usb_gadget *)NULL)->max_speed və sistem panikasına (panic) səbəb olur. Məlumatıma görə, əgər düzgün hesablayırsamsa, max_speed ofseti həqiqətən 0x5C-dir. (yadınızda saxlayın ki, struct work_struct-da 16 baytlıq GKI KABI rezervasiyası var) Bütün bunların necə işləməli olduğu mənə tam aydın deyil... lakin 0 qaytarmaq, sistemin panikaya düşməsindən daha yaxşı görünür...

CiddilikOrta
CVSS5.5
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc21 avq 2024
İlk görülmə21 avq 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel4.14.304, 4.19.271, 5.4.230, 5.10.165, 5.15.90, 6.1.8 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernelv < 4.14.304, 4.15 ≤ v < 4.19.271, 4.20 ≤ v < 5.4.230, 5.5 ≤ v < 5.10.165, 5.11 ≤ v < 5.15.90, 5.16 ≤ v < 6.1.8, 6.24.14.304, 4.19.271, 5.4.230, 5.10.165, 5.15.90, 6.1.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.