Меня попросили решить проблему безопасности в приложении codeigniter, размещенном на сервере Windows. IIS и вот описание проблемы. Я считаю, что это произошло из-за программного обеспечения для отчетности под названием «Acunetix».
Атака заголовка хоста
Описание уязвимости
Злоумышленник может манипулировать заголовком хоста, видимым веб-приложением, и вызывать непредсказуемое поведение приложения. Разработчики часто прибегают к крайне ненадежному заголовку HTTP Host (_SERVER [«HTTP_HOST»] в PHP). Даже приложения, защищенные в противном случае, доверяют этому значению настолько, что записывают его на страницу без HTML-кодирования с кодом, эквивалентным:
<link href="http://_SERVER['HOST']" (Joomla) ...and append secret keys and tokens to links containing it: <a href="http://_SERVER['HOST']?token=topsecret"> (Django, Gallery, others) ....and even directly import scripts from it: <script src="http://_SERVER['HOST']/misc/jquery.js?v=1.4.4"> (Various)
Затронутые предметы
- / TechP / пользователь / забыть
- / TechP / пользователь / Войти
- / TechP / пользователь / loginexec
- / TechP / пользователь / регистр
Влияние этой уязвимости
Злоумышленник может манипулировать заголовком хоста, видимым веб-приложением, и вызывать непредсказуемое поведение приложения.
Как исправить эту уязвимость
Веб-приложение должно использовать SERVER_NAME вместо заголовка Host. Он также должен создать фиктивный виртуальный хост, который перехватывает все запросы с неопознанными заголовками хоста. Это также можно сделать в Nginx, указав не подстановочный знак SERVER_NAME, и в Apache, используя не подстановочный знак serverName и включив директиву UseCanonicalName. Обратитесь к ссылкам для получения подробной информации.
Я не понял, в чем собственно проблема, так что кто-нибудь может кратко объяснить, как это исправить?
Эта уязвимость, насколько я понимаю, в первую очередь затрагивает сайты, которые являются стандартным хостом для IP-адреса. То есть независимо от Host
Заголовок HTTP отправляется клиентом, сайт обслуживается независимо. Сайты, которые являются единственным настроенным сайтом на HTTP-сервере, иногда могут быть настроены следующим образом.
Сайты, которые фактически размещены (т.е. они требовать действительный Host
заголовок) все еще может быть уязвимым, так как некоторые атаки отправляют несколько копий заголовка (см., в частности, раздел «Отравление кэша»).
Ваш первый шаг — повторить это. Настройте приложение на локальном экземпляре Apache и попытайтесь воспроизвести указанную конкретную уязвимость. Для этого вам нужно будет заставить его отвечать на IP-адрес (например, 127.0.0.1), а также localhost
, После этого вы можете использовать инструменты изменения заголовка (например, через curl
или плагины браузера), чтобы изменить Host
значение, как оно отправлено клиенту.
Попробуйте создать такие ситуации:
Как только вы продемонстрировали атаку, выясните, где конкретно был прочитан хост, и замените его настроенной версией. Это, конечно, должно быть специфичным для окружающей среды.
Других решений пока нет …