Re: Об одной малоизвестной уязвимости в веб сайтах
Gena Makhomed
gmm at csdoc.com
Thu Jun 12 12:40:21 UTC 2014
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 не применимы.
Как подходить к трактовке термина "invalid field-value"
в RFC 7230 тоже написано: http://tools.ietf.org/html/rfc7230#section-1.1
Сейчас nginx этим требованиям стандарта HTTP/1.1 не соответствует,
и пытается обрабатывать те запросы, на которые он на самом деле
MUST respond with a 400 (Bad Request) status code.
И это создает security проблемы с backend`ами, которые работают
по протоколу FastCGI и расчитывают на то, что nginx соответствует
требованиям стандарта HTTP/1.1 и не пропустит на backend запрос
с невалидным значением в заголовке Host. (RFC 2616 или RFC 7230)
Более правильно в этой ситуации наверное будет все-таки
привести nginx в соответствие с требованиями RFC 7230,
вместо того чтобы добавлять workaround`ы для этого бага
на стороне каждого backend`а, который работает с nginx.
=======================================================
Вопрос: признают ли разработчики nginx эту ошибку
и будет ли она исправлена в новых версиях сервера?
Второй вопрос: признается ли эта ошибка в nginx
проблемой с безопасностью (security vulnerability)
и будет ли по этому поводу выпущено CVE / advisorу
на http://nginx.org/en/security_advisories.html ?
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru