Уязвимость в коннекторах MODX
Php-ниндзя Евгений Борисов откопал очередную уязвимость в MODX Revolution, что подтверждает народную мудрость: «не бывает здоровых людей, бывают плохо диагностированные».
Итак, за подробностями отправляю вас на сайт автора, а сам пока напишу мой способ борьбы с этой (и будущими) уязвимостями.
В который уже раз Евгений доказал, что безопасность — дело личное, и заботится надо о ней самостоятельно, не полагаясь на используемый движок.
Честно говоря, я никогда и не полагался, поэтому у меня на всех сайтах директории core, manager и connectors закрыты по ip адресу. Делается это просто, через nginx:
Смысл правила в том, что все запросы, которые идут в эти директории проверяются по ip и дальше уже никуда не уходят. Поэтому отдельно прописана обработка php.
Понятно, что не все могут так ловко закрыть сайты, у многих динамические ip и им подойдёт другой вариант — базовая аутентификация.
Тут смысл в том, чтобы запоролить системные директории средствами web-сервера. Для этого нужно установить apache2-utils и сгенерировать пароли:
Первый запуск htpasswd с ключем -c создаёт файл с паролями, при добавлении новых юзеров этот ключ не нужен.
Дальше настроиваем nginx:
Как видите, разница всего в двух строчках.
Очень, очень рекомендую закрывать системные директории по ip, или, хотя бы, паролю. Сегодняшний баг, конечно, поправят, но никто не застрахован от будущих ошибок.
Эти правила должны быть повыше в конфиге, чтобы срабатывать раньше других. Регулярные выражения в nginx имеют приоритет, поэтому других регулярок выше быть не должно (например, обработки ~* \.php).
То есть, сначала защитные правила, потом все остальные location.
Уязвимости были и будут в любом ПО, на 100% от них защититься нельзя, но нужно стараться.
Очевидно, что свой собственный VPS в деле обеспечения безопасности сайтов очень поможет в этом вопросе. Кто еще не смотрел — рекомендую.
Официальное объявление и ссылки на обновление\фикс размещены вот тут.
Итак, за подробностями отправляю вас на сайт автора, а сам пока напишу мой способ борьбы с этой (и будущими) уязвимостями.
Защита по ip
В который уже раз Евгений доказал, что безопасность — дело личное, и заботится надо о ней самостоятельно, не полагаясь на используемый движок.
Честно говоря, я никогда и не полагался, поэтому у меня на всех сайтах директории core, manager и connectors закрыты по ip адресу. Делается это просто, через nginx:
location ~* ^/(core|manager|connectors)/ {
allow 125.68.91.12;
deny all;
location ~* \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass backend-sitename;
}
}Смысл правила в том, что все запросы, которые идут в эти директории проверяются по ip и дальше уже никуда не уходят. Поэтому отдельно прописана обработка php.
Защита по паролю
Понятно, что не все могут так ловко закрыть сайты, у многих динамические ip и им подойдёт другой вариант — базовая аутентификация.
Тут смысл в том, чтобы запоролить системные директории средствами web-сервера. Для этого нужно установить apache2-utils и сгенерировать пароли:
sudo apt-get install apache2-utils
cd /var/www/sitename/
htpasswd -c ./.htpasswd usernameПервый запуск htpasswd с ключем -c создаёт файл с паролями, при добавлении новых юзеров этот ключ не нужен.
Дальше настроиваем nginx:
location ~* ^/(core|manager|connectors)/ {
auth_basic "Restricted Access";
auth_basic_user_file /var/www/sitename/.htpasswd;
location ~* \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass backend-sitename;
}
}Как видите, разница всего в двух строчках.
Заключение
Очень, очень рекомендую закрывать системные директории по ip, или, хотя бы, паролю. Сегодняшний баг, конечно, поправят, но никто не застрахован от будущих ошибок.
Эти правила должны быть повыше в конфиге, чтобы срабатывать раньше других. Регулярные выражения в nginx имеют приоритет, поэтому других регулярок выше быть не должно (например, обработки ~* \.php).
То есть, сначала защитные правила, потом все остальные location.
Уязвимости были и будут в любом ПО, на 100% от них защититься нельзя, но нужно стараться.
Очевидно, что свой собственный VPS в деле обеспечения безопасности сайтов очень поможет в этом вопросе. Кто еще не смотрел — рекомендую.
Обновлено 05.06.13
Официальное объявление и ссылки на обновление\фикс размещены вот тут.
Комментарии: 30
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Но вообще, MODX явно потерял звание безопасной CMS.
А насчет генератора, я б не стал захламлять сервер апачевыми кишками и использовал бы утилитку в онлайне, например вот эту
И спасибо тебе за это!
Сайт немного поломался, в логах твой ip.
Экспиременты уже продолжал на локалхосте дабы ничего не сломать…
То есть также нужно смело закрывать директории core и connectors? Это не может сделать что-то недоступным для пользователей?
Nginx запускает php ровно так же, как и python — через proxy. Как настроишь, так он и отработает по указанному адресу.
Данный случай демонстрирует, что о своей безопасности нужно забодиться самому, не надеясь на авторов CMS или фреймворка. Ведь дырки находятся везде, независимо от языка.
А если не можешь позаботиться сам — нужно нанять специалиста, который всё проверит и настроит.
В случае с контроллерами ничего удивительно, т.к. они и задумывались для того, чтобы к ним обращались на прямую. Правда странно, что тут авторы не подумали про маршрутизацию наплодили туеву кучу файлов однотипного содержания.
Ибо в дополнениях используется обычно всего один коннектор, который всё разруливает.
по всему сайту появились ссылки на одно из страниц этого же сайта причем если открыть исходный код то ничего этого не видно, разве что только через просмотр кода элемента или файрбаг.
не могу понять моей ли рукожопостью вызваны они, аль кто воспользовался этой уязвимостью, да и самое страшное не могу понять как же от них избавиться
Смирнов НиколайСмирнов НиколайСмирнов НиколайВот на этот адрес smirnov1982kolya@yandex.ru