Rust Standard Kitabxanasında zəiflik

Rust standart kitabxanasında std::fs::remove_dir_all() funksiyasındakı yarış vəziyyətinə görə zəiflik (CVE-2022-21658) müəyyən edilib. Bu funksiya imtiyazlı proqramda müvəqqəti faylları silmək üçün istifadə edilərsə, təcavüzkar ixtiyari sistem faylları və qovluqların silinməsinə nail ola bilər ki, bu da təcavüzkarın adətən silmək hüququna malik deyil.

Zəiflik qovluqları rekursiv şəkildə silməzdən əvvəl simvolik keçidlərin yoxlanılmasının düzgün həyata keçirilməməsi nəticəsində yaranır. Simvolların izlənilməsinin qarşısını almaq əvəzinə, remove_dir_all() əvvəlcə faylın simvolik əlaqə olub-olmadığını yoxlayır. Əgər keçid müəyyən edilibsə, o zaman fayl kimi silinir, qovluqdursa, rekursiv məzmun silmə əməliyyatı çağırılır. Problem ondadır ki, yoxlama və silmə əməliyyatının başlaması arasında bir qədər gecikmə var.

Yoxlamanın artıq aparıldığı, lakin silinmək üçün qovluqların sadalanması əməliyyatının hələ başlamadığı bir vaxtda təcavüzkar qovluğu simvolik keçidlə müvəqqəti fayllarla əvəz edə bilər. Əgər o, lazımi anda vurarsa, remove_dir_all() funksiyası simvolik keçidi kataloq kimi qəbul edəcək və keçidin göstərdiyi məzmunu silməyə başlayacaq. Hücumun müvəffəqiyyəti kataloqun dəyişdirilməsinin seçilmiş vaxtının düzgünlüyündən və ilk dəfə düzgün anı vurmağın mümkün olmamasından asılı olmasına baxmayaraq, eksperimentlər zamanı tədqiqatçılar istismarı həyata keçirdikdən sonra təkrarlanan uğurlu hücuma nail ola bildilər. bir neçə saniyə.

Rust-un 1.0.0-dan 1.58.0 daxil olmaqla bütün versiyaları təsirlənir. Problem hələlik yamaq şəklində həll olunub (düzülmə bir neçə saat ərzində gözlənilən 1.58.1 buraxılışına daxil ediləcək). Siz bu səhifələrdə paylamalarda zəifliyin aradan qaldırılmasına nəzarət edə bilərsiniz: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Yüksək imtiyazlarla işləyən və remove_dir_all funksiyasından istifadə edən Rust proqramlarının bütün istifadəçilərinə Rust-u təcili olaraq 1.58.1 versiyasına yeniləmələri tövsiyə olunur. Maraqlıdır ki, buraxılmış yamaq bütün sistemlərdə problemi həll etmir; məsələn, REDOX ƏS-də və macOS-un 10.10-dan (Yosemite) əvvəlki versiyalarında zəiflik O_NOFOLLOW bayrağının olmaması səbəbindən bloklanmır, hansı ki, simvolik işarələri deaktiv edir. keçidlər.

Mənbə: opennet.ru

Добавить комментарий