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 (ok), 10:54, 19/07/2016 [ответить] [показать ветку] [···]     [к модератору]
  • –7 +/
    Все существующие технологии IT, библиотеки, программы 8212 это одно большее р... весь текст скрыт [показать]
     
     
  • 2.5, Аноним (-), 11:12, 19/07/2016 [^] [ответить]     [к модератору]  
  • +3 +/
    Вообще-то теми кто читает код проблема была исправлена ещё 15 лет назад Пробле... весь текст скрыт [показать]
     
     
  • 3.9, fdsa (ok), 11:25, 19/07/2016 [^] [ответить]    [к модератору]  
  • –4 +/
    С каких пор RFC стал спецификацией ?
     
     
  • 4.17, Sw00p aka Jerom (?), 12:27, 19/07/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    )) вот почему все протоколы в Ж?
     
  • 4.36, XoRe (ok), 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 лет? Ты сам то используешь хоть одну программу 30-летней давности?

     
     
  • 4.19, pkdr (ok), 13:02, 19/07/2016 [^] [ответить]    [к модератору]  
  • +3 +/
    Ты как обычно тупой бот от мелкомягких демонстрируешь своё отвратительное качество, то что твои криворукие создатели-индусы ничего не умеют, кроме того, чтобы щёлкать мышкой ещё не значит, что здоровые люди не пользуются таким софтом.

    Навскидку, ls, grep, ed, sed, vi, dd, cp, rm, cat ... десятки их, а то и сотни.

     
     
  • 5.32, Аноним (-), 07:16, 20/07/2016 [^] [ответить]     [к модератору]  
  • –1 +/
    Примеры не канают Это, если угодно, элементы кровеносной системы ОС, выполняющи... весь текст скрыт [показать]
     
  • 4.20, Andrey Mitrofanov (?), 13:04, 19/07/2016 [^] [ответить]    [к модератору]  
  • +3 +/
    >Ты сам то используешь хоть одну программу 30-летней давности?

    GNU Emacs.

    А ты?

     
     
  • 5.22, Аноним (-), 14:12, 19/07/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    А он MS DOS :-))
     
  • 2.15, Аноним (-), 12:02, 19/07/2016 [^] [ответить]    [к модератору]  
  • –1 +/
    Согласен. Хотелось бы как в математике. Сейчас полный разброд, шатание и костыли в этом IT. До сих пор есть разные ОС, компьютерные ресурсы не объединены, нет единых стандартов..
     
  • 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 [^] [ответить]    [к модератору]  
  • +/
    >>Ведь как только ТЫ прочьтешь код всё наладится! Да?

    как бы выразиться правильнее, как только Я читаю код (имеется ввиду гитхабный опенсорс), повеситься хочется!!! (не принимайте это предложение как инструкция к самоубийству).

    Качество КОДа за последние 10 лет опустилось ниже плинтуса.

    >>Бородатый код это СКАЛА! А где ты видел скалы без трещинок? :)

    А вот и нет, по мне это асм.

    >>Впрочем желаю тебе пользовать только новодел

    что есть новодел, уточните!

     
  • 3.24, _ (??), 16:27, 19/07/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    >пс: по сей день используем бородатый код.

    Я думаю с одного раза до тебя не дойдёт. Поэтому:
    Бородатый Перл - пофиксили в 2001 году.
    Рябе - через ___11___ лет :)
    Пых - смотри новость, но его невозможно пофиксить, место проклятое :)

     
  • 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 (где дерьмово все - начиная от самой идеи и заканчивая названием) - да, исправили единственным доступным способом.

    > Убрали проявление дыры при работе через mod_php, но оставили при запуске в режиме CGI.

    малыш, иди обратно в песочницу лепить куличики.

    Взрослый человек сперва бы подумал, что такое php_sapi_name()

     
  • 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, по процессу на запрос (если так кто-то ещё делает, конечно), то веб-сервер может помещать в переменную среды HTTP_PROXY содержимое заголовка Proxy.
     
  • 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 (ok), 17:34, 19/07/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    >php-fpm, mod_php

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

     
  • 1.35, Аноним (-), 23:19, 20/07/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Для nginx лучше закрываться на уровне хттп, а не фастцги.

    В контексте server:

    if ( $http_proxy ) { return 403 ; }

     
  • 1.37, Володя (??), 18:39, 21/07/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    В PHP оперативненько пофиксили https://bugs.php.net/bug.php?id=72573
     

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


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