Уязвимость в Apache (mod_proxy и mod_rewrite) устранена не полностью

В начале октября в http-сервере Apache была обнаружена уязвимость, позволяющая при работе mod_proxy в режиме обратного прокси отправить запрос из внешней сети к внутренним серверам в демилитаризованной зоне (DMZ), при наличии определенных rewrite-правил в конфигурации сервера. Очень быстро был выпущен патч, но как оказалось он бесполезен при использовании обходных путей для совершения атаки.

Оказалось, что запреты на доступ можно обойти при помощи URI-схемы. URI или Uniform Resource Identifier представляет собой три варианта: http, ftp или file. Самое часто используемое проксирующее правило ^(.*) http://internal_host$1, переадресующее запрос сервера к машине internal_host может использовать и обслуживаться для запросов типа host::port, причем host, как правило, совпадает с http://internal_host, однако в ряде случаев настройки созданы таким образом, что http://internal_host::port воспринимается как целый адрес, что позволяет обращаться к защищенным ресурсам.

Если в конфигурации сервера, есть примерно такое правило: RewriteRule ^(.*) http://www.example.com$1 [P], то атакующий может отправить запросы, типа:
GET @localhost::8880 HTTP/1.0rnrn
GET qualys:@qqq.qq.example.com HTTP/1.0rnrn

В первом случае запрос будет транслирован в «http://localhost::8880», т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat). Во втором случае запрос будет транслирован в «http://www.example.com@qqq.qq.example.com», и, соответственно, обращение будет к серверу qqq.qq.example.com.