Уязвимость связки apache + nginx на примере mod_status
Проводя сбор некоторой статистики, обнаружил интересную уязвимость, которая может проявляться при установке в качестве фронтенда, какого либо прокси, перенаправляющего запросы веб серверу.
Рассмотрим проблему на примере nginx и apache с установленным модулем mod_info. nginx слушает на *:80 порту и перенаправляет все запросы на apache, который висит на 127.0.0.1:80.
Все как обычно, за исключением одного НО: администратор забыл поставить модуль для apache, который подменял бы адрес пользователя в заголовках на реальный. Без этого расширения все запросы apache приходят с адреса 127.0.0.1. Для сайтов, где не предполагается работа с IP адресом пользователя это не важно и владелец сайта ничего не заметит, зато заметит apache ;)
Конфигурация модуля mod_info по умолчанию:
Чуете, чем пахнет? Вот именно, доступ к /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. Результаты статистики, упомянутой в начале статьи, будут опубликованы примерно через неделю. Ориентировочно сколько времени должно понадобиться для сбора информации о трех с половиной миллионах сайтов.
Рассмотрим проблему на примере 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. Результаты статистики, упомянутой в начале статьи, будут опубликованы примерно через неделю. Ориентировочно сколько времени должно понадобиться для сбора информации о трех с половиной миллионах сайтов.