Re: Об одной малоизвестной уязвимости в веб сайтах
Maxim Dounin
mdounin at mdounin.ru
Sat Jun 14 18:14:34 UTC 2014
Hello!
On Thu, Jun 12, 2014 at 03:40:21PM +0300, Gena Makhomed wrote:
> On 11.06.2014 22:53, Maxim Dounin wrote:
>
> >>>>>>>>>>http://habrahabr.ru/post/166855/
> ...
> >>>>>Единственный правильный способ: пойти в IETF с предложением исправить
> >>>>>соответствующие RFC, которые в том числе оговаривают, что следует делать
> >>>>>при получении нескольких заголовков Host, ну а потом уже сюда.
> ...
> >>http://tools.ietf.org/html/rfc7230#section-5.4
> >>
> >> A server MUST respond with a 400 (Bad Request) status code to any
> >> HTTP/1.1 request message that lacks a Host header field and to any
> >> request message that contains more than one Host header field or a
> >> Host header field with an invalid field-value.
> >>
> >>"invalid field-value" - это в том числе, когда клиент не выполняет
> >>требований, которые изложены выше в этом же документе:
> >>
> >> A client MUST send a Host header field in all HTTP/1.1 request
> >> messages. If the target URI includes an authority component, then a
> >> client MUST send a field-value for Host that is identical to that
> >> authority component, excluding any userinfo subcomponent and its "@"
> >> delimiter (Section 2.7.1).
> >
> >Если исходить из такой трактовки термина "invalid field-value", то
> >ранее процитированное требование про "the proxy MUST ignore the
> >received Host header..." и далее по тексту - не имеет смысла.
>
> В стандарте дается однозначное определение, что такое "proxy":
>
> A "proxy" is a message-forwarding agent that is selected
> by the client, usually via local configuration rules.
>
> nginx - это "reverse proxy" / "gateway", и все те требования,
> которые там предъявляются к "proxy", - к nginx не применимы.
Я нигде не говорил, что требование - применимо к nginx'у. Я
говорил, что упомянутое требование - не имеет смысла, если
пользоваться предлагаемой интерпретацией термина "invalid
field-value".
Прокси-сервер, помимо всего прочего, является сервером, и
процитированное требование вернуть 400 в ответ на "Host header
field with an invalid field-value" - к нему тоже относится.
Соответственно, если трактовать термин "invalid field-value" как
включающий проверку не только синтаксиса, но и требований,
предъявляемых к формированию заголовка Host клиентом, то
требование "ignore the received Host header" теряет смысл.
Впрочем, сама идея о том, что требования к клиенту как-либо
опосредованно могут влиять на интерпретацию требований к серверу -
она странная, если не сказать грубее.
> Как подходить к трактовке термина "invalid field-value"
> в RFC 7230 тоже написано: http://tools.ietf.org/html/rfc7230#section-1.1
Приведённая ссылка не имеет никакого отношения к термину "invalid
field-value".
Теримн "field-value" расшифровывается в "3.2. Header Fields",
http://tools.ietf.org/html/rfc7230#section-3.2:
field-value = *( field-content / obs-fold )
Соответственно invalid - это то, что не соответствует указанному
синтаксису.
На этом, наверно, и завершим нашу дискуссию, т.к. конструктивной
она явно не получается.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru