В феврале текущего года разработчик из компании Vend обнаружил уязвимость, у которой теперь имеется собственный логотип, имя и официальный сайт. Проблема получила название HTTPoxy, она распространяется на многие приложения и библиотеки, в том числе PHP, Go, Apache HTTP server, Apache TomCat, PHP-engine HHVM и Python. Интересно, что корнями проблема уходит в 2001 год, к обнаруженной еще тогда уязвимости.
Исходная проблема датирована еще 2001 годом, именно тогда Рэндал Л. Шварц обнаружил, что libwww-perl некорректно обрабатывает хедеры HTTP_PROXY. Позднее такая же проблема была выявлена и исправлена в curl (апрель 2001), Ruby (июль 2012), Nginx (ноябрь 2013) и теперь уязвимость обнаружена в PHP, Python, Go и так далее.
Технические детали нового-старого бага подробно описаны как на официальном сайте HTTPoxy, так и в бюллетенях US CERT, Apache, Red Hat, Nginx, Drupal, CloudFlare и Akamai.
Проблема заключается в том, в CGI окружении HTTP-запрос, содержащий хедер «Proxy», обрабатывается переменной окружения HTTP_PROXY на стороне сервера приложения. Из-за конфликта имен эта переменная будет использовать данный прокси-сервер для любых исходящих HTTP-соединений. То есть если HTTP_PROXY указывает на вредоносный сервер, соединения веб-приложений, обращенные к другим системам, могут быть перехвачены, что потенциально дает атакующему возможность удаленно выполнить в уязвимой системе произвольный код.
Исследователи приводят простой пример: скажем, вы работаете с Drupal-плагином, который использует Guzzle 6 и отправляет куда-либо исходящие HTTP-запросы (например, проверяет погодный API). HTTPoxy может быть использована против этих запросов.
«HTTPoxy невероятно легко эксплуатировать, и мы ожидаем, что специалисты по безопасности смогут быстро обнаружить уязвимость, — пишет исследователь Vend Доминик Шерлинк, нашедший проблему. — Если вы не деплоите код, волноваться не о чем. Но если вы работаете с PHP или CGI, отключите Proxy хедеры немедленно».
CVE идентификаторы, уже присвоенные связанным с HTTPoxy багам: CVE-2016-5385 (PHP), CVE-2016-5386 (Go), CVE-2016-5387 (Apache HTTP), CVE-2016-5388 (Apache TomCat), CVE-2016-1000109 (HHVM) и CVE-2016-1000110 (Python). В будущем CVE явно станет больше, по мере обнаружения проблем в других, менее распространенных программах.
Эксперты настоятельно рекомендуют не ждать выхода отдельных обновлений для разного софта, а закрыть дыру своими силами. Как это сделать, подробно описано на официальном сайте бага. Также Шерлинк опубликовал в своем блоге подробное описание проблемы для «не технарей».