ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: чтение чужих файлов.



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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.