Прочитал тут про свежую найденную уязвимость в стандартной библиотеке Rust, но что-то мне кажется, подобные вещи могут быть на любом языке и даже не совсем понятно как их избегать в общем случае, то есть, случае подмены файлов за короткое время
https://www.opennet.ru/opennews/art.shtml?num=56551
Уязвимость вызвана некорректной реализацией проверки символических ссылок перед рекурсивным удалением каталогов. Вместо запрета следования по символическим ссылкам, функция remove_dir_all() вначале проверяет, является ли файл символической ссылкой. Если определена ссылка, то она удаляется как файл, а если каталог - то вызывается операция рекурсивного удаления содержимого. Проблема в том, что между проверкой и началом операции удаления имеется небольшая задержка.
В момент, когда проверка уже проведена, но операция перебора каталогов для удаления ещё не началась, атакующий может подменить каталог со временными файлами на символическую ссылку. В случае попадания в нужный момент функция remove_dir_all() обработает символическую ссылку как каталог и начнёт удаление содержимого, на которое указывает данная ссылка.
Меня заинтересовал даже не конкретный случай, а как вообще надо правильно программировать в ситуациях, когда изменение файловой системы в процессе работы с ней может быть критично важным. Например, между readdir и операцией с найденными файлами.