CVE-2026-74640
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: ALSA: FCP: fcp_meter_ctl_get() funksiyasında OOB yazma xətası düzəldildi fcp_ioctl_set_meter_map() istifadəçi tərəfindən təmin edilən Level Meter xəritə ölçüsünü drayverin öz limiti olan 255 ilə məhdudlaşdırır: if (map.map_size < 1 || map.map_size > 255 || map.meter_slots < 1 || map.meter_slots > 255) return -EINVAL; və bunu idarəetmənin kanal sayı kimi fcp_add_new_ctl() funksiyasına ötürür, burada həmin dəyər elem->channels olaraq saxlanılır. Hər bir idarəetmə oxuması struct snd_ctl_elem_value strukturuna yazır, onun tam ədəd massivi long value[128] olaraq təyin edilib, buna görə də limit 255 yox, 128-dir. fcp_meter_ctl_get() hər kanal üçün bir 64-bit sözü heç bir məhdudiyyət olmadan həmin massivə yazır: for (i = 0; i < elem->channels; i++) { int idx = private->meter_level_map[i]; int value = idx < 0 ? 0 : le32_to_cpu(resp[idx]); ucontrol->value.integer.value[i] = value; } snd_ctl_elem_read_user() həmin obyekti kmalloc-2048-dən götürülmüş LP64 üzrə 1224 baytlıq memdup_user(_control, sizeof(*control)) vasitəsilə təmin edir. offsetof(struct snd_ctl_elem_value, value) 72-dir, beləliklə i elementi 72 + 8 * i baytına yazılır və 144-cü element artıq ayrılmış sahəni aşır. map_size 255 olduqda sonuncu yazma əməliyyatı 2112-ci baytda başa çatır ki, bu da obyektin 888 bayt sonrası və bitişik slab obyektinin 64 baytıdır. Saxlanan sözlər cihazdan gəlir və meter_level_map[] hansı sözün hansı slotda yerləşəcəyini seçir, beləliklə həm miqdar, həm də məzmun idarə olunur. Nüvə bunu aşkar etmir. snd_ctl_check_elem_info() yalnız CONFIG_SND_CTL_DEBUG aktiv olduqda snd_ctl_elem_read() tərəfindən çağırılan __snd_ctl_elem_info() vasitəsilə əlçatandır; bu seçim olmadıqda snd_ctl_skip_validation() compile-time zamanı true olur. __snd_ctl_add_replace() kcontrol->count dəyərini yoxlayır, lakin elem->channels-i heç vaxt yoxlamır. Həddindən artıq böyük xəritənin quraşdırılması üçün CAP_SYS_RAWIO lazımdır, lakin idarəetmə onu yaradan hwdep deskriptorundan daha uzun müddət mövcud qalır, buna görə də sərhədləri aşan yazma əməliyyatları /dev/snd/controlC0 üzərində idarəetməni oxuya bilən hər hansı proses tərəfindən icra edilir. 7.2.0-rc5 (arm64) versiyasında imtiyazsız idarəetmə oxuması ilə tetiklənmiş KASAN: BUG: KASAN: slab-out-of-bounds in fcp_meter_ctl_get Write of size 8 at addr ffff000017af04c8 by task fcp_trigger/185 __asan_store8 fcp_meter_ctl_get snd_ctl_elem_read snd_ctl_ioctl Allocated by task 185: memdup_user snd_ctl_ioctl The buggy address is located 0 bytes to the right of allocated 1224-byte region [ffff000017af0000, ffff000017af04c8) Xəritə ölçüsü 255 ilə deyil, ABI limiti ilə məhdudlaşdırıldı və yazma dövrü çıxış nöqtəsində elə məhdudlaşdırıldı ki, elem->channels nəyə bərabər olmasından asılı olmayaraq value massivini aşmasın. XBOW tərəfindən aşkar edilmiş, Baul Lee <[email protected]> tərəfindən triaj edilmişdir.
Necə düzəltmək olar
- Linux Linuxbb30e35c36ed00f24fa39aded811f64230a913b0, bb61dc2ae59026f76db26e1909746908bc5b6f31, 620f1e52a46f604635efd0fb78138afd6a513b5d və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 46757a3e7d50dac923888e7fbe68377736f13c70 ≤ v < bb30e35c36ed00f24fa39aded811f64230a913b0, 46757a3e7d50dac923888e7fbe68377736f13c70 ≤ v < bb61dc2ae59026f76db26e1909746908bc5b6f31, 46757a3e7d50dac923888e7fbe68377736f13c70 ≤ v < 620f1e52a46f604635efd0fb78138afd6a513b5d, 6.14 | bb30e35c36ed00f24fa39aded811f64230a913b0, bb61dc2ae59026f76db26e1909746908bc5b6f31, 620f1e52a46f604635efd0fb78138afd6a513b5d |
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.