SecureTmp
Безопасность и временные файлы
Date: Wed, 17 Aug 2005 03:38:02 +0400 From: "Dmitry V. Levin" <ldv@> To: ALT Devel discussion list <devel@> Subject: Re: [devel Re: suid/sgid programs and temporary files]
On Wed, Aug 17, 2005 at 03:33:43AM +0400, Alexey Tourbin wrote: > On Wed, Aug 17, 2005 at 02:50:56AM +0400, Dmitry V. Levin wrote: > > > Можно в двух словах, почему небезопасно передовать временный файл по > > > имени? Ведь если потенциальный злоумышленник не может ни читать/писать, > > > ни удалить временный файл, то в чем страдает безопасность? > > > > Это разновидность TOCTOU: с момента проверки до момента использования > > ситуация может измениться. Например, временный файл, созданный в /tmp, > > может быть удалён, если он не используется, каким-нибудь stmpclean'ом. > > Даже права на каталог могут измениться с момента последней проверки. > > Если представить себе, что привилегированная программа получила SIGSTOP и > > отправилась отдыхать на недельку-другую, то окно становится вполне > > пригодным для атаки. > > То есть "навредить" нам может либо root, либо мы сами себе. > Потенциальному злоумышленнику остается только ждать наступления более > благоприятной ситуации, которая, по идее, наступить не должна. > > То есть проверка каталога по этой схеме перед созданием временного файла > практически гарантирует, что все остальные операции с временным файлом > пройдут безопасно.
В случае с привилегированными программами такая гарантия появляется только в случае проверки на euid, иначе запускающий такую программу может попробовать через неё добыть себе права через манипуляции с каталогом.
--
ldv
Date: Wed, 17 Aug 2005 10:37:30 +0400 From: Alexey Tourbin <at@> To: devel@ Subject: [devel Re: suid/sgid programs and temporary files]
On Wed, Aug 17, 2005 at 09:02:44AM +0600, Andrey Rahmatullin wrote: > On Wed, Aug 17, 2005 at 02:55:07AM +0400, Dmitry V. Levin wrote: > > Да, tmpfile(3) удаляет созданный файл сразу, > Почему об этом нет в мане?
В K&R тоже написано, что временный файл "автоматически удаляется при его закрытии или обычном завершении программы своей работы" (стр.311). Видимо, такая формулировка в K&R/~ANSI C используется из-за соображений портабельности, т.к. не на всех платформах можно удалить файл и продолжать работать с дескриптором. А ман, скорее всего, просто пересказывает ANSI C.
В сущности, какая разница, когда удалить файл, если его имя не возвращается? Лучше удалить сразу (на тех платформах, которые это поддерживают).