Осебпазирӣ дар китобхонаи стандартии Rust

Дар китобхонаи стандартии Rust осебпазирӣ (CVE-2022-21658) аз сабаби ҳолати мусобиқа дар функсияи std::fs::remove_dir_all() муайян шудааст. Агар ин функсия барои нест кардани файлҳои муваққатӣ дар замимаи имтиёзнок истифода шавад, ҳамлакунанда метавонад ба несткунии файлҳои система ва директорияҳои худсарона ноил шавад, ки ҳамлакунанда одатан барои нест кардани онҳо дастрасӣ надорад.

Ин осебпазирӣ дар натиҷаи нодуруст иҷро кардани санҷиши истинодҳои рамзӣ пеш аз рекурсивӣ нест кардани директорияҳо ба вуҷуд омадааст. Ба ҷои пешгирӣ кардани пайгирии аломатҳо, remove_dir_all() аввал месанҷад, ки оё файл пайванди рамзӣ аст. Агар истинод муайян шуда бошад, он гоҳ ҳамчун файл нест карда мешавад ва агар он директория бошад, пас амалиёти тозакунии мундариҷаи рекурсивӣ даъват карда мешавад. Мушкилот дар он аст, ки байни чек ва оғози амалиёти тозакунӣ каме таъхир вуҷуд дорад.

Дар замоне, ки санҷиш аллакай анҷом дода шудааст, аммо амалиёти номбар кардани директорияҳо барои несткунӣ ҳанӯз оғоз нашудааст, ҳамлакунанда метавонад директорияро бо файлҳои муваққатӣ бо истиноди рамзӣ иваз кунад. Агар он дар вақти лозима ворид шавад, функсияи remove_dir_all() истиноди рамзиро ҳамчун директория баррасӣ мекунад ва ба тоза кардани мундариҷае, ки истинод ба он ишора мекунад, оғоз мекунад. Сарфи назар аз он, ки муваффақияти ҳамла аз дурустии вақти интихобшудаи иваз кардани директория ва задани лаҳзаи дурусти бори аввал вобаста аст, дар давоми таҷрибаҳо муҳаққиқон тавонистанд, ки пас аз анҷом додани истисмор дар дохили он ҳамлаи муваффақи такроршаванда ба даст оранд. чанд сония.

Ҳама версияҳои Rust аз 1.0.0 то 1.58.0 таъсир мерасонанд. Ҳоло масъала дар шакли часпак ҳал карда шудааст (ислоҳ ба версияи 1.58.1 дохил карда мешавад, ки дар давоми чанд соат интизор аст). Шумо метавонед бартарафсозии осебпазириро дар тақсимот дар ин саҳифаҳо назорат кунед: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Ба ҳама корбарони барномаҳои Rust, ки бо имтиёзҳои баланд кор мекунанд ва бо истифода аз функсияи remove_dir_all тавсия дода мешавад, ки Rust-ро фавран ба версияи 1.58.1 навсозӣ кунанд. Ҷолиб он аст, ки ямоқи баровардашуда мушкилотро дар ҳама системаҳо ҳал намекунад; масалан, дар REDOX OS ва версияҳои macOS то 10.10 (Yosemite), осебпазирӣ аз сабаби мавҷуд набудани парчами O_NOFOLLOW баста намешавад, ки он рамзи зеринро хомӯш мекунад. пайвандҳо.

Манбаъ: opennet.ru

Илова Эзоҳ