The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

19.07.2016 09:55  Уязвимость, позволяющая совершить MITM-атаку через манипуляцию с HTTP-заголовком Proxy

Опубликована информация об уязвимости под кодовым названием Httpoxy, которая охватывает достаточно большой пласт http-серверов, но может применяться для ограниченного набора серверных web-приложений, осуществляющих обращение к внешним Web API. Уязвимость вызвана дублированием назначения переменной окружения HTTP_PROXY, которая может быть выставлена как для определения системных настроек прокси-сервера, так и на основе трансляции переданного клиентом HTTP-заголовка "Proxy:" в соответствии с требованиями RFC 3875.

Создание системной переменной окружения HTTP_PROXY является достаточно простым способом для организации работы http-клиентов через прокси. Суть проблемы в том, что существует пласт полагающихся на переменную окружения HTTP_PROXY библиотек, которые могут использоваться в работающих на стороне сервера web-приложениях для обращения к внешним ресурсам, например, для отправки запросов к различным Web API, загрузки файлов или выполнения проверок (проверка наличия введённого URL, обращение к внешним службам аутентификации и т.п.). В случае передачи HTTP-заголовка "Proxy:" http-сервер также создаст переменную окружения HTTP_PROXY, но уже на основании данных пользователя, что позволяет направить все сетевые запросы уязвимого web-приложения через определённый прокси-сервер.

Предположим, что имеется CGI-скрипт, отправляющий запрос к внешнему Web API для проверки параметров аутентификации клиента и использующий для отправки этого запроса библиотеку, распознающую переменную окружения HTTP_PROXY. Обращение к этому скрипту с подставным HTTP-заголовком "Proxy:" приведёт к установке переменной окружения HTTP_PROXY и запрос будет сделан не напрямую, а через IP, указанный атакующим через заголовок "Proxy:". Направив таким способом скрипт на фиктивный обработчик API, атакующий может симулировать успешную проверку или подсмотреть приватные данные, отправляемые в составе внутреннего запроса к API.

Проблема касается только web-приложений, выполняющих внешние запросы и использующих для отправки запроса проблемные HTTP-клиенты. Например, уязвимость проявляется в программах на PHP (php-fpm, mod_php - CVE-2016-5385), использующих библиотеки Guzzle 4+ и Artax, в CGI-скриптах на Python (wsgiref.handlers.CGIHandler, twisted.web.twcgi.CGIScript - CVE-2016-1000110), использующих библиотеку Requests, в Apache Tomcat (CVE-2016-5388) и в программах на языке Go (net/http/cgi - CVE-2016-5386), применяющих модуль net/http. В Curl и Perl (libwww-perl) проблема была устранена ещё в 2001 году. В Ruby аналогичная уязвимость в Net::HTTP была исправлена в 2012 году.

Наиболее простым способом устранения уязвимости является блокирование обработки HTTP-заголовка Proxy на стороне http-сервера. Например, в Apache httpd достаточно воспользоваться модулем mod_headers.so и добавить директиву "RequestHeader unset Proxy early", а в nginx принудительно очистить переменную HTTP_PROXY директивой "fastcgi_param HTTP_PROXY ''".

  1. Главная ссылка к новости (http://openwall.com/lists/oss-...)
  2. OpenNews: Уязвимость в Apache открывает двери к внутренним ресурсам на другой стороне обратного прокси
  3. OpenNews: Новый метод атаки на обратный прокси Apache
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: proxy, http
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, Alex_K, 10:51, 19/07/2016 [ответить] [смотреть все]
  • +/
    Каким образом mod_php уязвим?
     
     
  • 2.3, Аноним, 11:05, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    В mod_php эмулируется установка переменных окружения CGI.
     
     
  • 3.31, Аноним, 23:07, 19/07/2016 [^] [ответить] [смотреть все]
  • +/
    Неправда.
     
  • 1.2, Аноним11677, 10:54, 19/07/2016 [ответить] [смотреть все]
  • –7 +/
    Все существующие технологии IT, библиотеки, программы 8212 это одно большее р... весь текст скрыт [показать]
     
     
  • 2.5, Аноним, 11:12, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +3 +/
    Вообще-то теми кто читает код проблема была исправлена ещё 15 лет назад Пробле... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.9, fdsa, 11:25, 19/07/2016 [^] [ответить] [смотреть все]  
  • –4 +/
    С каких пор RFC стал спецификацией ?
     
     
  • 4.17, Sw00p aka Jerom, 12:27, 19/07/2016 [^] [ответить] [смотреть все]  
  • +2 +/
    )) вот почему все протоколы в Ж?
     
  • 4.36, XoRe, 23:45, 20/07/2016 [^] [ответить] [смотреть все]  
  • +/
    > С каких пор RFC стал спецификацией ?

    Уже лет 20-25 как.

     
  • 2.7, Аноним, 11:20, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +8 +/
    Ну покажете свой, недырявый уже 30 лет, добротный код - мы тут все поаплодируем!
     
     
  • 3.12, Аноним, 11:45, 19/07/2016 [^] [ответить] [смотреть все]  
  • –2 +/
    клоун программы продаются не за аплодисменты И почему 30 лет Ты сам то исполь... весь текст скрыт [показать]
     
     
  • 4.19, pkdr, 13:02, 19/07/2016 [^] [ответить] [смотреть все]  
  • +3 +/
    Ты как обычно тупой бот от мелкомягких демонстрируешь своё отвратительное качест... весь текст скрыт [показать]
     
     
  • 5.32, Аноним, 07:16, 20/07/2016 [^] [ответить] [смотреть все]  
  • –1 +/
    Примеры не канают Это, если угодно, элементы кровеносной системы ОС, выполняющи... весь текст скрыт [показать]
     
  • 4.20, Andrey Mitrofanov, 13:04, 19/07/2016 [^] [ответить] [смотреть все]  
  • +3 +/
    GNU Emacs А ты ... весь текст скрыт [показать]
     
     
  • 5.22, Аноним, 14:12, 19/07/2016 [^] [ответить] [смотреть все]  
  • +2 +/
    А он MS DOS :-))
     
  • 2.15, Аноним, 12:02, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Согласен Хотелось бы как в математике Сейчас полный разброд, шатание и костыли... весь текст скрыт [показать] [показать ветку]
     
  • 2.18, Sw00p aka Jerom, 12:33, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    соглашусь только с этим КОД НИКТО НЕ ЧИТАЕТ пс по сей день используем бородаты... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.23, _, 16:20, 19/07/2016 [^] [ответить] [смотреть все]  
  • +/
    Ну и ты, скорее уже съешь этих хрустяших французких булок Ведь как только ТЫ п... весь текст скрыт [показать]
     
     
  • 4.27, Sw00p aka Jerom, 17:04, 19/07/2016 [^] [ответить] [смотреть все]  
  • +/
    как бы выразиться правильнее, как только Я читаю код имеется ввиду гитхабный оп... весь текст скрыт [показать]
     
  • 3.24, _, 16:27, 19/07/2016 [^] [ответить] [смотреть все]  
  • +1 +/
    Я думаю с одного раза до тебя не дойдёт Поэтому Бородатый Перл - пофиксили в 2... весь текст скрыт [показать]
     
  • 1.4, Володя, 11:10, 19/07/2016 [ответить] [смотреть все]  
  • +/
    В guzzle уже пофиксили https://github.com/guzzle/guzzle/commit/9d521b23146cb6cedd772770a2617fd6cbdb15
     
     
  • 2.6, Аноним, 11:14, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Это называется исправили if php_sapi_name cli getenv HTTP_... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.8, Володя, 11:24, 19/07/2016 [^] [ответить] [смотреть все]  
  • +/
    Будь так добр, отправь им PR!
     
  • 3.16, пох, 12:11, 19/07/2016 [^] [ответить] [смотреть все]  
  • –1 +/
    учитывая невозможность оторвать руки изобретателям env var HTTP_PROXY где дерьм... весь текст скрыт [показать]
     
  • 1.11, Аноним, 11:43, 19/07/2016 [ответить] [смотреть все]  
  • +/
    Я что-то не понял каким образом это можно в Go проэксплуатировать Если запустит... весь текст скрыт [показать]
     
     
  • 2.13, Аноним, 11:48, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Похоже не всё так страшно. https://golang.org/src/net/http/transport.go#L212
     
  • 2.14, Сиромант, 11:51, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Если у тебя Go запускается как классическое приложение CGI, по процессу на запро... весь текст скрыт [показать] [показать ветку]
     
  • 1.21, непонятно, 13:57, 19/07/2016 [ответить] [смотреть все]  
  • +4 +/
    > В Curl и Perl (libwww-perl) проблема была устранена ещё в 2001 году.

    Ахахах, олдскул vs хипсторы — 1:0

    :D

     
     
  • 2.30, DimasiQ, 20:06, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    А при чем тут хипстеры?
    Что-то не вижу в списке уязвимых node.js.
     
     
  • 3.33, Аноним, 08:07, 20/07/2016 [^] [ответить] [смотреть все]  
  • +1 +/
    Не мешай алтфакам воевать с воображаемыми хипсторами.
     
  • 1.25, Аноним, 16:35, 19/07/2016 [ответить] [смотреть все]  
  • +2 +/
    И в чём беда Прокси пользователя ничем не лучше и не хуже любого друго хоста на... весь текст скрыт [показать]
     
     
  • 2.26, Andrey Mitrofanov, 16:39, 19/07/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    > И в чём беда? Прокси пользователя ничем не лучше и не хуже
    > любого друго хоста на пути трафика.

    Вы не поняли, пытайтесь.

    > Хотите безопасности - https.

    Адресочек для трененровки паранойи подсказать, или тебе не надо, ты здоров?

    > ответ. Иначе при недоступности сервера все пройдут проверку.

     
     
  • 3.29, Аноним, 18:53, 19/07/2016 [^] [ответить] [смотреть все]  
  • +/
    Тот самый крайне редкий случай, когда Митрофанов относительно адекватен ... весь текст скрыт [показать]
     
     
  • 4.34, Andrey Mitrofanov, 10:05, 20/07/2016 [^] [ответить] [смотреть все]  
  • +/
    >>> И в чём беда? Прокси пользователя ничем не лучше и не хуже
    >>> любого друго хоста на пути трафика.
    >> Вы не поняли, пытайтесь.
    > Тот самый крайне редкий случай, когда Митрофанов относительно адекватен.

    //На такое оскорбленеие я не могу не ответить

    Может, он имел в виду того МИТМ-атакера под "пользователем прокси"? Тогда, да, ошибочка -- он точно не хуже, не лучше других.

     
  • 1.28, Ilya Indigo, 17:34, 19/07/2016 [ответить] [смотреть все]  
  • +/
    >php-fpm, mod_php

    А в php-fastcgi проблема отсутствует?

     
  • 1.35, Аноним, 23:19, 20/07/2016 [ответить] [смотреть все]  
  • +1 +/
    Для nginx лучше закрываться на уровне хттп, а не фастцги В контексте server if... весь текст скрыт [показать]
     
  • 1.37, Володя, 18:39, 21/07/2016 [ответить] [смотреть все]  
  • +/
    В PHP оперативненько пофиксили https://bugs.php.net/bug.php?id=72573
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor