LINUX.ORG.RU

Как можно гарантировать, что-то вроде целостности транзакций в ФС

 


2

2

Прочитал тут про свежую найденную уязвимость в стандартной библиотеке Rust, но что-то мне кажется, подобные вещи могут быть на любом языке и даже не совсем понятно как их избегать в общем случае, то есть, случае подмены файлов за короткое время

https://www.opennet.ru/opennews/art.shtml?num=56551

Уязвимость вызвана некорректной реализацией проверки символических ссылок перед рекурсивным удалением каталогов. Вместо запрета следования по символическим ссылкам, функция remove_dir_all() вначале проверяет, является ли файл символической ссылкой. Если определена ссылка, то она удаляется как файл, а если каталог - то вызывается операция рекурсивного удаления содержимого. Проблема в том, что между проверкой и началом операции удаления имеется небольшая задержка.

В момент, когда проверка уже проведена, но операция перебора каталогов для удаления ещё не началась, атакующий может подменить каталог со временными файлами на символическую ссылку. В случае попадания в нужный момент функция remove_dir_all() обработает символическую ссылку как каталог и начнёт удаление содержимого, на которое указывает данная ссылка.

Меня заинтересовал даже не конкретный случай, а как вообще надо правильно программировать в ситуациях, когда изменение файловой системы в процессе работы с ней может быть критично важным. Например, между readdir и операцией с найденными файлами.

★★★★★

Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от anonymous

Насколько оно удобно в работе? Если происходит блокировка на заметное время, особенно если процесс подвисает и быстро не раздупляется, то как оно с этим? Особенно в Linux какие варианты?

praseodim ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.