Дмитрий DarkByte Москин

Мой блог, да.
logo

Уязвимость связки apache + nginx на примере mod_status

Опубликовано 23.10.2011 автором Дмитрий Москин
Проводя сбор некоторой статистики, обнаружил интересную уязвимость, которая может проявляться при установке в качестве фронтенда, какого либо прокси, перенаправляющего запросы веб серверу.

Рассмотрим проблему на примере nginx и apache с установленным модулем mod_info. nginx слушает на *:80 порту и перенаправляет все запросы на apache, который висит на 127.0.0.1:80.

Все как обычно, за исключением одного НО: администратор забыл поставить модуль для apache, который подменял бы адрес пользователя в заголовках на реальный. Без этого расширения все запросы apache приходят с адреса 127.0.0.1. Для сайтов, где не предполагается работа с IP адресом пользователя это не важно и владелец сайта ничего не заметит, зато заметит apache ;)

Конфигурация модуля mod_info по умолчанию:
In file: /etc/apache2/modules.d/00_mod_info.conf
4: <Location /server-info>
5: SetHandler server-info
6: Order deny,allow
7: Deny from all
8: Allow from 127.0.0.1
: </Location>

Чуете, чем пахнет? Вот именно, доступ к /server-info будут иметь все пользователи, ведь, по мнению apache их IP адрес 127.0.0.1.

Конечно же, в этом нет ничего особо страшного, по данной ссылке пользователь всего лишь может посмотреть ваши конфигурационные файлы apache, список используемых модулей и параметры с которыми был собран apache. Но чем меньше информации будет известно злоумышленнику о вашем сервере, тем меньше вероятность того, что он найдёт опасную уязвимость.

Кроме /server-info могут существовать и другие ресурсы, доступ к которым был ограничен только локальными подключениям, но вследствии ошибки был предоставлен всем. Например phpinfo или phpmyadmin, папки cache или backup, а так же /server-status, который более опасен, чем /server-info, т.к. показывает запросы пользователей к серверу, среди которых вполне могут быть конфиденциальные данные, например идентификаторы сессий или логины пользователей.

Для того, чтобы apache видел реальные IP адреса пользователей я использую модуль mod_rpaf. Инструкцию по его установке можно найти в интернетах.

P.S. Для тех, кто не знаком с mod_info, реальный пример вывода можно посмотреть на официальном сайте проекта apache.

P.P.S. Результаты статистики, упомянутой в начале статьи, будут опубликованы примерно через неделю. Ориентировочно сколько времени должно понадобиться для сбора информации о трех с половиной миллионах сайтов.