Welcome! Log In Create A New Profile

Advanced

Re: proxy cache key и fastcgi cache key

Gena Makhomed
January 10, 2014 06:46AM
On 10.01.2014 12:24, Валентин Бартенев wrote:

>>> Кому интересно почитать, подробней вот ссылка.
>>> http://habrahabr.ru/post/166855/
>>>
>>> Как видите, корректное значения имеют только переменные $host и
>>> $server_name, все что основывается на $http_host имеет потенциал
>>> уязвимость, если бекенд доверяет этой переменой, лично я знаю несколько
>>> популярных РНР фрейморков которые используют эту переменную без проверки
>>> и без экранирования в SQL запросах.

>> и пофиксить эту проблему можно в исходниках nginx таким образом,
>> что если вдруг в переменных $host и $http_host оказываются разные
>> значения, чтобы nginx в $http_host записывал значение из $host.
>>
>> тогда после установки следующего обновления nginx эта уязвимость
>> в backend`ах автоматически пофиксится у всех пользователей nginx.
>>
>> причем без какой-либо необходимости пользователям править
>> файлы fastcgi.conf / fastcgi_params и все производные от них.

> Так, между делом, хочу напомнить, что на CGI есть спецификация, описывающая
> все переменные окружения, которые сервер должен передавать приложению.
> И в ней вполне черным по белому сказано, что все переменные HTTP_* это
> protocol specific переменные полученные из заголовков переданных клиентом.

fastcgi_param HTTP_HOST1 $http_host;
fastcgi_param HTTP_HOST2 $host;
fastcgi_param HTTP_HOST3 $server_name;

Делаем запрос:
GET http://site3.dev/phpinfo.php HTTP/1.1
Host:~%#$^&*()<>?@\!."'{}[]=+|

На выходе получим
_SERVER["HTTP_HOST1"]: ~%#$^&*()<>?@\!."'{}[]=+|
_SERVER["HTTP_HOST2"]: site3.dev
_SERVER["HTTP_HOST3"]: site2.dev

В переменной $host правильное значение,
в переменной $http_host все что угодно.

А ведь именно на основании значения переменной $host
nginx и принимает решение в какой server направить запрос
на обработку. Но к FastCGI уходит не $host, с которым
работал nginx принимая решение, а fake-значение из $http_host

Они то protocol specific, но раз запрос клиента попал в server
где в server_name прописано site3.dev - клиент искренне полагает,
что надлежащую проверку уже провел nginx, ведь в конфиге пользователь
прописал:

server {
listen 80 default_server;
return 444;
}

B значит все другие значения HTTP_HOST, которые не соответствуют
нормальным значениям server_name должны попадать в этот server-заглушку.
Поэтому валидировать еще раз то, что и так уже провалидировал nginx
никакого смысла нет. С точки зрения обычных пользователей, коих 99.999%.
Я и сам так считал до недавнего времени, доверяя документации nginx:

http://nginx.org/en/docs/http/request_processing.html

http://nginx.org/en/docs/http/server_names.html

http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name

> И есть безопасная и специфицированная переменная SERVER_NAME.

она есть такая только для FastCGI, а для proxy_pass
на апач - все не так просто, если погуглить
server_name http_host site:bugs.php.net

тем более, что в SERVER_NAME со стороны веб-сервера
будет приезжать каноническое имя сервера, а это обычно hostname.
и для всех виртуальных хостов будет одинаковое значение SERVER_NAME.

путаницы с этим хватает: https://stackoverflow.com/questions/1459739/

Поэтому те кто пишут на php не могут доверять значению SERVER_NAME,
и у них остается единственный вариант - только переменная HTTP_HOST.

> Если кто-то в приложении использует данные полученные от клиента без
> надлежащей проверки, когда в любой книжке "web-programming for dummies"
> написано по 5 раз, что не следует доверять этим данным, то что я могу
> предложить? Расстрел.

Они проверяют и валидируют значение HTTP_HOST средствами nginx,
так как это прописано в документации к nginx, и рекомендовано
разработчиками nginx. Зачем два раза проверять одно и то же?

Как будто мало разработчикам проблем с самим php
и его глюками, например, cgi.fix_pathinfo 1 по умолчанию:
http://habrahabr.ru/post/100961/#comment_3125990

Так теперь еще и с nginx при использовании php-fpm
эти глюки. А ведь php-fpm это наверное основной уже
способ как использовать php и nginx.

Попробую иначе спросить: что может поломать предложенный
мной выше fix, который будет закрывать эту уязвимость в backend`ах,
которые доверяют значению переменной HTTP_HOST полученной от nginx?

"Самый эффективный способ защиты — явно определить HTTP_HOST на стороне
веб сервера." - цитата из статьи http://habrahabr.ru/post/166855/

Сейчас же nginx по-умолчанию отправляет на backend
значения $proxy_host и $http_host вместо ожидаемого там $host.
Если глюк с $proxy_host очевиден, то глюк с $http_host совсем нет.

Способы решения проблемы:

1. Расстрелять всех, кто пишет кривой код. - Нереально.

2. Исправить все глюки и весь кривой код. - Нереально.

3. Всем вручную добавить fix в fastcgi_param HTTP_HOST $host;

4. Добавить этот fix в дефолтовые конфиги nginx.

5. Исправить это один раз в коде nginx и забыть про проблему.

Способ №5 самый простой в реализации и 100% эффективный метод защиты.

Почему "нет" ?

P.S.

Например, вот сколько "магии" наворотили в модуле кеширования,
и незаметное (недокументированное) трансформирование HEAD в GET,
и незаметное (недокументированное) вырезание заголовков
If-Modified-Since и If-None-Match и выключение кеширования,
если в ответе присутствует заголовко Set-Cookie и т.д. и т.п.

А такую мелочь с передачей на backend валидного значения $host,
которая никому не будет мешать и только принесет max. пользу...

--
Best regards,
Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 07, 2014 06:16AM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 09, 2014 07:12AM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 09, 2014 08:58AM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 09, 2014 09:34AM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 10, 2014 04:56AM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 10, 2014 10:44AM

Re: proxy_cache_key и fastcgi_cache_key

Валентин Бартенев January 10, 2014 12:58PM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 10, 2014 03:34PM

Re: proxy_cache_key и fastcgi_cache_key

Валентин Бартенев January 10, 2014 03:50PM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 10, 2014 04:12PM

Re: proxy_cache_key и fastcgi_cache_key

Валентин Бартенев January 10, 2014 06:18PM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 13, 2014 07:24AM

Re: proxy_cache_key и fastcgi_cache_key

S.A.N January 09, 2014 02:03PM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 09, 2014 05:58PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 05:26AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 06:46AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 07:08AM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 08:10AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 03:52PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 05:18PM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 06:08PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 06:52PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 07:18PM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 11, 2014 06:20AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 11, 2014 05:36AM

Re: proxy cache key и fastcgi cache key

S.A.N January 10, 2014 07:40PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 08:08PM

Re: proxy cache key и fastcgi cache key

S.A.N January 10, 2014 10:07PM

Re: proxy cache key и fastcgi cache key

S.A.N January 10, 2014 10:30PM

Re: proxy cache key и fastcgi cache key

S.A.N January 11, 2014 03:12AM

Re: proxy cache key и fastcgi cache key

S.A.N January 13, 2014 12:31AM

Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 11, 2014 06:32AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 11, 2014 06:44AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 11, 2014 07:26AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 11, 2014 03:54PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 12, 2014 08:42AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 14, 2014 02:16PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 15, 2014 04:10PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 16, 2014 08:02AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 16, 2014 11:19AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 16, 2014 11:38AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 16, 2014 03:36PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 17, 2014 03:02AM

Re: Об одной малоизвестно й уязвимости в веб сайтах

Gena Makhomed June 17, 2014 06:36AM

Re: Об одной малоизвестно й уязвимости в веб сайтах

S.A.N June 17, 2014 04:11PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 16, 2014 04:22PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 17, 2014 02:32AM

Re: Об одной малоизвестно й уязвимости в веб сайтах

Gena Makhomed June 17, 2014 06:32AM

Re: Об одной малоизвестн ой уязвимости в веб сайтах

Maxim Dounin June 17, 2014 07:04AM

Re: Об одной малоизвест ной уязвимости в веб сайтах

Валентин Бартенев June 17, 2014 07:16AM

Re: Об одной малоизвест ной уязвимости в веб сайтах

Igor Sysoev June 18, 2014 10:28AM

Re: Об одной малоизвестн ой уязвимости в веб сайтах

Валентин Бартенев June 17, 2014 07:06AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Dmitry June 11, 2014 03:56PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 12, 2014 10:47AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 02:42AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 10:46AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 01:02PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 03:31PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 04:12PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 04:50PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 04:16PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 17, 2014 01:30PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 06:05PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 18, 2014 03:56AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 18, 2014 12:15PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 18, 2014 04:06AM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 07:54AM

nginx и RFC

Gena Makhomed January 13, 2014 07:44PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 273
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready