Kwetsberens yn de Rust standert bibleteek

In kwetsberens (CVE-2022-21658) is identifisearre yn 'e Rust-standertbibleteek fanwege in racebetingst yn' e std :: fs :: remove_dir_all () funksje. As dizze funksje brûkt wurdt om tydlike bestannen yn in befoarrjochte applikaasje te wiskjen, kin in oanfaller it wiskjen fan willekeurige systeembestannen en mappen berikke dy't de oanfaller normaal gjin tagong hat om te wiskjen.

De kwetsberens wurdt feroarsake troch ferkearde ymplemintaasje fan it kontrolearjen fan symboalyske keppelings foardat mappen rekursyf fuortsmiten wurde. Yn stee fan te foarkommen dat symlinks wurde folge, kontrolearret remove_dir_all() earst oft de triem in symlink is. As in keppeling is definieare, dan wurdt it wiske as in bestân, en as it in map is, dan wurdt in rekursive ynhâldferwideringsoperaasje neamd. It probleem is dat d'r in lichte fertraging is tusken de kontrôle en it begjin fan 'e wiskje.

Op in stuit dat de kontrôle al útfierd is, mar de operaasje fan it opheljen fan mappen foar wiskjen is noch net begon, kin de oanfaller de map ferfange troch tydlike bestannen mei in symboalyske keppeling. As it op it krekte momint trefft, sil de funksje remove_dir_all() de symboalyske keppeling behannelje as in map en begjinne mei it fuortheljen fan de ynhâld dêr't de keppeling nei wiist. Nettsjinsteande it feit dat it sukses fan 'e oanfal hinget ôf fan' e krektens fan 'e keazen tiid fan it ferfangen fan' e map en it slaan fan it juste momint de earste kear is net wierskynlik, tidens de eksperiminten wiene de ûndersikers yn steat om in werhelle suksesfolle oanfal te berikken nei it útfieren fan 'e eksploitaasje binnen in pear sekonden.

Alle ferzjes fan Rust út 1.0.0 oant 1.58.0 ynklusyf wurde beynfloede. It probleem is foar no oplost yn patchfoarm (de fix sil opnommen wurde yn 'e 1.58.1-release, dy't binnen in pear oeren wurdt ferwachte). Jo kinne de eliminaasje fan 'e kwetsberens yn distribúsjes kontrolearje op dizze siden: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Alle brûkers fan Rust-programma's dy't rinne mei ferhege privileezjes en de funksje remove_dir_all brûke, wurde advisearre om Rust driuwend te aktualisearjen nei ferzje 1.58.1. It is nijsgjirrich dat de frijlitten patch it probleem net op alle systemen oplost; bygelyks yn REDOX OS en ferzjes fan macOS foar 10.10 (Yosemite), wurdt de kwetsberens net blokkearre fanwegen it ûntbrekken fan 'e flagge O_NOFOLLOW, dy't folgjende symboalyske útskeakelje keppelings.

Boarne: opennet.ru

Add a comment