Kahinaan sa Rust standard library

Natukoy ang isang kahinaan (CVE-2022-21658) sa Rust standard library dahil sa isang kundisyon ng lahi sa std::fs::remove_dir_all() function. Kung ang function na ito ay ginagamit upang tanggalin ang mga pansamantalang file sa isang privileged application, maaaring makamit ng isang attacker ang pagtanggal ng mga arbitrary system file at mga direktoryo na ang attacker ay karaniwang hindi magkakaroon ng access na tanggalin.

Ang kahinaan ay sanhi ng hindi tamang pagpapatupad ng pagsuri ng mga simbolikong link bago muling tanggalin ang mga direktoryo. Sa halip na pigilan ang mga symlink na sundan, ang remove_dir_all() ay susuriin muna kung ang file ay isang symlink. Kung ang isang link ay tinukoy, pagkatapos ito ay tatanggalin bilang isang file, at kung ito ay isang direktoryo, pagkatapos ay tinatawag na isang recursive na operasyon sa pag-alis ng nilalaman. Ang problema ay mayroong bahagyang pagkaantala sa pagitan ng tseke at pagsisimula ng operasyon ng pagtanggal.

Sa oras na ang pagsusuri ay naisagawa na, ngunit ang operasyon ng pag-enumerate ng mga direktoryo para sa pagtanggal ay hindi pa nagsisimula, maaaring palitan ng umaatake ang direktoryo ng mga pansamantalang file na may simbolikong link. Kung tumama ito sa tamang oras, ituturing ng remove_dir_all() function ang simbolikong link bilang isang direktoryo at magsisimulang alisin ang nilalaman kung saan itinuturo ng link. Sa kabila ng katotohanan na ang tagumpay ng pag-atake ay nakasalalay sa katumpakan ng napiling oras ng pagpapalit ng direktoryo at pagpindot sa tamang sandali sa unang pagkakataon ay malamang na hindi, sa panahon ng mga eksperimento ang mga mananaliksik ay nakamit ang isang paulit-ulit na matagumpay na pag-atake pagkatapos na maisagawa ang pagsasamantala sa loob ng mga ilang segundo.

Lahat ng bersyon ng Rust mula 1.0.0 hanggang 1.58.0 inclusive ay apektado. Ang isyu ay nalutas sa patch form sa ngayon (ang pag-aayos ay isasama sa 1.58.1 release, na inaasahan sa loob ng ilang oras). Maaari mong subaybayan ang pag-aalis ng kahinaan sa mga pamamahagi sa mga pahinang ito: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Ang lahat ng mga gumagamit ng Rust program na tumatakbo na may mataas na mga pribilehiyo at gamit ang remove_dir_all function ay pinapayuhan na agarang i-update ang Rust sa bersyon 1.58.1. Ito ay kagiliw-giliw na ang inilabas na patch ay hindi malulutas ang problema sa lahat ng mga system; halimbawa, sa REDOX OS at mga bersyon ng macOS bago ang 10.10 (Yosemite), ang kahinaan ay hindi naharang dahil sa kawalan ng O_NOFOLLOW na bandila, na hindi pinapagana ang pagsunod sa simbolikong mga link.

Pinagmulan: opennet.ru

Magdagdag ng komento