CVE-2025-22083
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: vhost-scsi: vhost_scsi_set_endpoint funksiyasına edilən çoxsaylı çağırışların idarə olunmasının düzəldilməsi Əgər vhost_scsi_set_endpoint funksiyası aralarında vhost_scsi_clear_endpoint çağırılmadan bir neçə dəfə çağırılarsa, Haoran Zhang tərəfindən aşkar edilmiş bir neçə xətayla qarşılaşmaq mümkündür: 1. Heç bir tpg tapılmadıqda yaranan "use-after-free" (azad edilmiş yaddaşdan istifadə): Bu, vhost_scsi_set_endpoint bir neçə dəfə çağırıldıqda və ilk çağırışdan sonrakı çağırışlarda vs_tpg-yə əlavə etmək üçün heç bir tpg tapılmadıqda baş verən "use-after-free" problemini həll edir. vhost_scsi_set_endpoint ilk dəfə vs_tpg massivinə əlavə etmək üçün tpg-lər tapdıqda match=true olur və biz bunu yerinə yetiririk: vhost_vq_set_backend(vq, vs_tpg); ... kfree(vs->vs_tpg); vs->vs_tpg = vs_tpg; Əgər vhost_scsi_set_endpoint yenidən çağırılırsa və heç bir tpg tapılmazsa, match=false olur, buna görə də vhost_vq_set_backend çağırışı ötürülür və vs_tpg göstəricisi qalır, sonra isə onu belə azad edirik: kfree(vs->vs_tpg); vs->vs_tpg = vs_tpg; Daha sonra SCSI sorğusu göndərildikdə: vhost_scsi_handle_vq -> vhost_scsi_get_req -> vhost_vq_get_backend zənciri işləyir və bu, az öncə kfree ilə azad etdiyimiz vs_tpg-ni görür. 2. Tpg dir silinməsinin asılı qalması (hang): Bu yamama, refcount-un -1-ə düşməsi səbəbindən LIO/target təbəqəsi tpg-sinin (və onun üzərindəki target kimi strukturların) dir kataloqunun silinə bilməməsi problemini həll edir. Problem ondadır ki, əgər vhost_scsi_set_endpoint tpg-nin artıq vs->vs_tpg massivində olduğunu aşkar edərsə və ya tpg silindiyi üçün target_depend_item uğursuz olarsa, undepend goto idarəedicisi vs_tpg massivindəki bütün tpg-lər üzərində target_undepend_item funksiyasını icra edərək onların refcount-unu 0-a endirəcək. Bu zaman vs_tpg həm cari vhost_scsi_set_endpoint çağırışında əlavə etdiyimiz tpg-ləri, həm də əvvəlki çağırışlarda əlavə etdiyimiz və eyni zamanda vs->vs_tpg-də olan tpg-ləri ehtiva edir. Sonradan vhost_scsi_clear_endpoint işə düşdükdə, o, vs->vs_tpg-dəki bütün tpg-lər üzərində target_undepend_item funksiyasını icra edəcək və bu, onların refcount-unu -1-ə endirəcək. Nəticədə, userspace tpg-ni silə bilməyəcək və tpg dir kataloqunu rmdir etməyə çalışarkən proses asılı qalacaqdır. 3. Tpg sızması (leak): Bu, vhost_scsi_set_endpoint fərqli target adları ilə bir neçə dəfə çağırıldıqda target adının üzərinə yazılması nəticəsində tpg-lərin sızmasına və onların silinməz olmasına səbəb olan xətanı düzəldir. Xəta o halda baş verir ki, istifadəçi VHOST_SCSI_SET_ENDPOINT funksiyasını çağırıb vhost-scsi cihazını target/tpg eşləşməsinə quraşdırır, daha sonra isə əvvəllər görmədiyimiz tpg-ləri olan yeni bir target adı ilə yenidən VHOST_SCSI_SET_ENDPOINT çağırır (məsələn, target1-in tpg1-i var, lakin target2-nin tpg2-si var). Bu baş verdikdə köhnə target tpg eşləşməsi ləğv edilmir, sadəcə target adının və vs->vs_tpg massivinin üzərinə yazılır. Daha sonra vhost_scsi_clear_endpoint icra edildikdə, bizə ya target1, ya da target2-nin adı ötürülür və vs->vs_tpg üzərində dövr edərkən yalnız həmin target-in tpg-ləri uyğun gələcək. Beləliklə, tpg-lər üzərində target_undepend_item icra etmədən funksiyadan çıxılacaq. Bütün bu xətalar göstərir ki, vhost_scsi_set_endpoint funksiyasının bir neçə dəfə çağırılması heç vaxt dəstəklənməyib. Əsas istifadəçi olan QEMU-da bu istifadə halının qarşısını almaq üçün artıq yoxlamalar mövcuddur. Buna görə də problemləri həll etmək üçün bu yamama, əgər tpg-lər artıq uğurla əlavə edilibsə, vhost_scsi_set_endpoint funksiyasının çağırılmasının qarşısını alır. Tpg konfiqurasiyasını və ya target adını əlavə etmək, silmək və ya dəyişdirmək üçün əvvəlcə vhost_scsi_clear_endpoint icra edilməlidir.
Necə düzəltmək olar
- linux linux_kernel6.6.87, 6.12.23, 6.13.11, 6.14.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 | 3.9.1 ≤ v < 6.6.87, 6.7 ≤ v < 6.12.23, 6.13 ≤ v < 6.13.11, 6.14 ≤ v < 6.14.2, 3.9 | 6.6.87, 6.12.23, 6.13.11, 6.14.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.