Четыре пробела в начале случайного имени HTTP-заголовка - PullRequest
1 голос
/ 11 июля 2019

Я обнаружил доменное имя (веб-сайт и API), которое добавляет такой заголовок к каждому HTTP-ответу:

    XTVOpalL: Gtm; path=/; Max-Age=900

Название заголовка выглядит случайным. Вот еще несколько примеров:

    XRQOJalT: LtZ; path=/; Max-Age=900
    XYjOzalA: Ntx; path=/; Max-Age=900
    XykOMalm: ytD; path=/; Max-Age=900

Обратите внимание на первые 4 пробела. И сравните с другими заголовками ответа:

HTTP/1.1 301 Moved Permanently
Date: Sat, 05 May 2018 11:52:25 GMT
Server: Apache
Location: http://example.com/wp/
Content-Length: 229
Content-Type: text/html; charset=iso-8859-1
Set-Cookie: visid_incap_993094=GuEL85vzTDKQUJ9jfphhgvma7VoAAAAAQUIPAAAAAACgWz3NlkG3smvkXeB6Ewyl; expires=Sun, 05 May 2019 08:21:45 GMT; path=/; Domain=.example.com
Set-Cookie: nlbi_993094=z0NWEcMl0wAVBr8CiwzebQAAAACu2KRRlrUCoWpyWKTrUAJF; path=/; Domain=.example.com
Set-Cookie: incap_ses_115_993094=/xoUXc5Kags3fAFBHpCYAfma7VoAAAAABT/i1XAh1J4D/02wGnXO9w==; path=/; Domain=.example.com
Set-Cookie: ___utmvmicuVtwf=peInjtBXhca; path=/; Max-Age=900
Set-Cookie: ___utmvaicuVtwf=wYxmyOU; path=/; Max-Age=900
Set-Cookie: ___utmvbicuVtwf=TZr
    XYjOzalA: Ntx; path=/; Max-Age=900
X-Iinfo: 13-63374213-63374214 NNNN CT(222 -1 0) RT(1525521145044 0) q(0 0 2 0) r(5 5) U11
X-CDN: Incapsula

Основная проблема - этот заголовок иногда является первым заголовком в ответе. Что, в свою очередь, считается уязвимостью.

В моем случае это выглядит так:

HTTP/1.1 301 Moved Permanently
    XYjOzalA: Ntx; path=/; Max-Age=900
Date: Sat, 05 May 2018 11:52:25 GMT
Server: Apache
Location: http://example.com/wp/
...

Цитирование RFC HTTP 1.1 https://tools.ietf.org/html/rfc7230#section-3

Отправитель НЕ ДОЛЖЕН отправлять пробел между строкой начала и первым полем заголовка. ...

Наличие такого пробела в запросе может быть попыткой обмануть сервер в игнорировании этого поля или обработке строки после это как новый запрос, любой из которых может привести к безопасности уязвимость, если другие реализации в цепочке запросов интерпретировать одно и то же сообщение по-разному. Кроме того, наличие такие пробелы в ответе могут игнорироваться некоторыми клиентами или заставить других прекратить разбор.

Это приводит к ошибке выброса node.js при попытке анализа этих HTTP-ответов Код ошибки HPE_INVALID_HEADER_TOKEN, который выдается только в том случае, если заголовки HTTP искажены.

Вопрос: что это? Кто это делает? Почему?

1 Ответ

2 голосов
/ 11 июля 2019

«Что это?»

Это ошибка на стороне сервера, так как она нарушает протокол HTTP.

На самом деле, обсуждалось в рабочей группе HTTP в 2013 году за "ошибку в библиотеке Python", и я думаю, что вывод Джулиана Решке правильно:

Это не допустимое имя поля, поэтому не является допустимым началом строки поля заголовка.

...

Это запрещено грамматикой, поэтому оно недействительно.

«Кто это делает? Почему?»

Когда разработчик генерирует случайное имя заголовка HTTP, он / она вводит эти 4 пробельных символа, случайно.

...