Уязвимость Httpoxy Позволяет Перенаправлять Http-Запросы Веб-Приложений



Уязвимость HTTPoxy позволяет перенаправлять HTTP-запросы веб-приложений

18 июля была опубликована информация о наборе уязвимостей под названием HTTPoxy. С его помощью злоумышленники могут подделать переменную среды HTTP_PROXY, что позволяет им перенаправлять http-запросы к веб-приложениям на их ресурсы.

Уязвимость была выявлена при участии разработчика Vend Доминика Шейрлинка, который написал в своем блоге на Medium сказал о том, как это обнаружили его коллеги во время анализа одного из обращений, поступивших в службу поддержки.



Как это работает

Ссылка на волосы подробно объясняет, как работает HTTPoxy. Типичная атака с использованием этого набора уязвимостей выглядит следующим образом:
  1. Злоумышленник создает специально созданный HTTP-запрос, содержащий заголовок прокси;
  2. CGI получает запрос и сохраняет значение заголовка в переменной среды HTTP_PROXY;
  3. Приложение CGI запускает собственный веб-клиент, используя переменную среды HTTP_PROXY в качестве настроек прокси;
  4. Клиент отправляет запрос, который вместо адреса назначения проксируется через сервер злоумышленника.

Например, так может выглядеть операционный код на нескольких популярных языках: PHP:
  
  
  
  
  
  
  
   

$client = new GuzzleHttp\Client(); $client->get(' http://api.internal/Эsecret=foo ')

Питон:

from wsgiref.handlers import CGIHandler def application(environ, start_response): requests.get(" http://api.internal/Эsecret=foo ") CGIHandler().

run(application)

Идти:

cgi.Serve( http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { res, _ := http.Get(" http://api.internal/Эsecret=foo ") // [.

]

Более подробные PoC можно найти на GitHub в специальном разделе HTTPoxy-репозитории .

Интересный момент: сама ошибка, которая используется в атаке HTTPoxy, была обнаружена пятнадцать лет назад. На Веб-сайт , посвященный HTTPoxy, содержит подробное описание истории уязвимости.

По его словам, в марте 2001 года была обнаружена и исправлена ошибка: некорректная обработка заголовков HTTP_PROXY в libwww-perl. В апреле того же года проблема была обнаружена в Curl (и также исправлена, правда, не для Windows).

В 2012 году команда проекта Ruby разработала HTTP_PROXY для Net::HTTP — в их системе не было уязвимостей.

В ноябре 2013 года о ней упомянули в рассылке NGINX — ошибку описал пользователь Джонатан Мэтьюс, хотя и не был до конца уверен в своей правоте.

В феврале 2015 года уязвимость также была упомянута в списке рассылки Apache httpd-dev. А уже в июле 2016 года сотрудник Vend Скотт Гири обнаружил ошибку в реальной системе.



Какие системы уязвимы?

Как выяснила команда безопасности Vend, уязвимость содержится во многих современных языках и библиотеках.

  • CVE-2016-5386 Перейти
  • CVE-2016-5387 Apache HTTPD
  • CVE-2016-5388 Томкэт
  • CVE-2016-1000104 mod_fcgi
  • CVE-2016-1000107 HTTP-сервер Erlang
  • CVE-2016-1000108 YAWS
  • CVE-2016-1000109 HHVM FastCGI
  • CVE-2016-1000110 Python CGIHandler
  • CVE-2016-1000111 Искаженный Python


Как обнаружить уязвимость в вашем программном обеспечении

Специалисты RedHat развитый Небольшой скрипт, позволяющий определить, уязвима ли конкретная система к HTTPoxy. Для этого администратору сервера необходимо установить следующий CGI-скрипт и сделать его исполняемым:

test.cgi: #!/bin/sh echo "Content-Type:text/plain" echo "" echo "HTTP_PROXY='$HTTP_PROXY'"

После этого следует вызвать CGI-скрипт с заголовком Proxy:

curl -H ‘Proxy: AFFECTED’ http://my-server-name/cgi-bin/test.cgi

Если вывод команды выглядит так, сервер не уязвим:

HTTP_PROXY="

Если вывод выглядит не так, например, отображается надпись ниже, то система уязвима:

HTTP_PROXY='AFFECTED'



Как защитить себя

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

Для этого им необходимо заблокировать заголовки запросов прокси — это можно сделать очень быстро.

Это не должно нанести вред функциональности приложения, поскольку такие заголовки нестандартны и широко не используются.

Например, вот как вы можете отключить заголовки прокси-сервера в Apache с помощью файла .

htaccess:

<IfModule mod_headers.c> RequestHeader unset Proxy </IfModule>

Многие ИТ-компании и разработчики программного обеспечения уже заявили, что приняли меры для защиты своих пользователей от уязвимости HTTPoxy, в том числе Акамай , ОблакоВспышка , исправления выпущены и Красная Шапка .

Эксперты Positive Technologies разработали сигнатуру для Suricata IDS, которая позволяет обнаружить использование заголовка «Proxy» в HTTP-запросах и предотвратить возможные последствия.

Подпись и пример работы можно найти в официальном репозитории.

x.com/AttackDetection/status/756142402268639232 .

Теги: #httpoxy #прокси #уязвимости #информационная безопасность #веб-приложения #информационная безопасность #Тестирование веб-сервисов

Вместе с данным постом часто просматривают: