[devel] Re: suid/sgid programs and temporary files

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Ср Авг 17 02:06:33 MSD 2005


On Wed, Aug 17, 2005 at 01:42:56AM +0400, Alexey Tourbin wrote:
> On Tue, Aug 16, 2005 at 11:56:29PM +0400, Dmitry V. Levin wrote:
> > > Условия подчеркнутой проверки можно перевести примерно как
> > > 	st.st_uid > 10 && st.st_uid != getuid()
> > > 
> > > Вопрос: хорошо ли, что здесь используется real uid?  Не лучше ли
> > > проверять effective uid? 
> > 
> > Это зависит от семантики модуля.
> > Другими словами, для чего он предназначен.
> 
> Модуль предназначен для безопасного создания временных файлов.
> Семантика, грубо говоря, такая же, как у mktemp(1).
> 
> Когда при помощи `mktemp -t prog.XXXXXX` создается временный файл, я не
> знаю, проверяет ли mktemp *каталог*, в котором будет создан временный
> файл.  Если каталог принадлежит не руту (st_uid > 10) и не нам, то
> "кто-то" (потенциальный злоумышленник) может попросту подменить
> временный файл (старый удалить, а вместо него сделать новый).
> Возможность подмены сохраняется, если каталог доступен по записи
> кому-нибудь ещё (и не защищен sticky bit'ом).

mktemp не проверяет $TMPDIR на безопасность.
Между прочим, передача временного файла по имени небезопасна сама по себе,
эта тема обсуждалась год-два-три назад в списках рассылки типа bugtraq.
Выход - использовать mkstemp(3), который возвращает открытый дескриптор;
в этом случае файл может находится где угодно, и проблема может возникнуть
только с его удалением.

> > При той информации, что содержится в комментарии, у меня складывается
> > ощущение, что проверять effective uid было бы логичнее.
> 
> Это особенно актуально для suid'ных скриптов.  Если Василий запускает
> suid скрипт, который создаёт временный файл в ~/tmp (каталог считается
> безопасным, потому что getuid() == Василий), то временный файл можно
> будет подменить.  С другой стороны, если бы выполнялась проверка
> geteuid() == Василий, то каталог ~/tmp уже не считался бы безопасным.

Это усиливает точку зрения, согласно которой нужно использовать geteuid.


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20050817/e2a99233/attachment-0001.bin>


Подробная информация о списке рассылки Devel