Re: чтение чужих файлов.
Alexandre Snarskii
snar на snar.spb.ru
Пт Ноя 25 09:54:17 UTC 2011
On Fri, Nov 25, 2011 at 01:25:34PM +0400, Igor Sysoev wrote:
> > Скорее всего симлинки.
> >
> > У апача ЕМНИП есть опция (не )?ходить по симлинкам.
> > Возможно надо такую же в nginx?
>
> http://httpd.apache.org/docs/2.2/mod/core.html#options
>
> FollowSymLinks
> SymLinksIfOwnerMatch
>
> This option should not be considered a security restriction,
> since symlink testing is subject to race conditions that
> make it circumventable.
>
> Отсюда возникает вопрос: имеет ли смысл тестировать каждый элемент
> пути при каждом запросе, если это не даёт 100% гарантии ?
Сугубое jimho: весь путь проверять не надо. Достаточно проверять
последний элемент пути, и, возможно, даже не "проверять самому",
а переложить проверку на операционную систему флагом O_NOFOLLOW
в open(2).
Почему: симлинк-атака базируется на стандартном location'е
location ~ \.(gif|png|<whatever else static files>)$ {
root /some/user;
}
при котором "злому хацкеру" достаточно прописать в своей директории
симлинк image.gif -> /some/other-user/config.php, и добавление
O_NOFOLLOW от этой атаки прикрывает.
Да, O_NOFOLLOW проверяет только последний элемент пути, но этого
а) достаточно (выставление симлинка "уровнем выше" к атаке не приводит,
ибо под данный location не попадает).
б) не очень сильно ломает функционал атомарных обновлений (хотя
если пользовательская CMS подставляет файлы именно симлинком
"последнего элемента" - это сломается, ведь симлинки не будут работать
даже внутри одной директории, но потому-то эта опция должна быть
конфигурируема для location'а а не включена по умолчанию).
PS: от атаки на хардлинках это по любому не защищает.
--
In theory, there is no difference between theory and practice.
But, in practice, there is.
Подробная информация о списке рассылки nginx-ru