Уязвимость в коннекторах 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
Спасибо за анонс. На самом деле за кадром остался еще один баг с LFI тоже через коннекторы. Но я его не раскручивал, т.к. эта дырка будет покритичней. Да и в версии 2.2.8 скорее всего LFI отвалится под воздействием факторов. Хотя… Поживем увидим в общем)
Я так понимаю, если позакрывать core|manager|connectors — то с этими багами вполне можно жить.
Но вообще, MODX явно потерял звание безопасной CMS.
Но вообще, MODX явно потерял звание безопасной CMS.
Но вообще, MODX явно потерял звание безопасной CMS.Это и была моя первоочередной целью после статьи про то, какие они крутые по сравнению с Drupal и другими движками modx.com/blog/2012/05/29/why-we-dont-do-powered-by-by-default/
я метод по паролю где-то тут уже предлагал…
А насчет генератора, я б не стал захламлять сервер апачевыми кишками и использовал бы утилитку в онлайне, например вот эту
А насчет генератора, я б не стал захламлять сервер апачевыми кишками и использовал бы утилитку в онлайне, например вот эту
Кстати, тебе предупреждение, за то что лазил на mamaboutique.
Сайт немного поломался, в логах твой ip.
Сайт немного поломался, в логах твой ip.
Да на самом деле не совсем корректно с моей стороны, но я там заметил открытую директорию с коннектрорами ну и к моему сожалению смог воспользоваться хаком, утром думал об этом отписать+)
Экспиременты уже продолжал на локалхосте дабы ничего не сломать…
Экспиременты уже продолжал на локалхосте дабы ничего не сломать…
Закрывал директорию админки с помощью .htaccess с кодом, где xxx.xx.xx.xx — это айпи админа.
Order Deny,Allow
Deny from all
Allow from xxx.xx.xx.xx
То есть также нужно смело закрывать директории core и connectors? Это не может сделать что-то недоступным для пользователей?
Если твои пользователи не ходят в админку — все будет ок.
Оперативненько вышел фикс, 2.2.8 :)
Женя уже не в первый раз подпинывает релизы =)
Одни из причин изза которых я недолюбливаю php это его встраиваемость, и то что php файл можно запустить просто вбив путь к нему в адресной строке.
Это проблема не php, а веб-серверов и их настройки.
Nginx запускает php ровно так же, как и python — через proxy. Как настроишь, так он и отработает по указанному адресу.
Nginx запускает php ровно так же, как и python — через proxy. Как настроишь, так он и отработает по указанному адресу.
Не совсем так, всетаки на Python «true runtime» приложения. И в той же Django нельзя получить доступ к самим .py/.pyc файлам набрав их в адресной строке
Не буду спорить, python изучал 2 дня.
Данный случай демонстрирует, что о своей безопасности нужно забодиться самому, не надеясь на авторов CMS или фреймворка. Ведь дырки находятся везде, независимо от языка.
А если не можешь позаботиться сам — нужно нанять специалиста, который всё проверит и настроит.
Данный случай демонстрирует, что о своей безопасности нужно забодиться самому, не надеясь на авторов CMS или фреймворка. Ведь дырки находятся везде, независимо от языка.
А если не можешь позаботиться сам — нужно нанять специалиста, который всё проверит и настроит.
Я в этом не спорю просто сказал о том что лично мне не нравится в использовании php. А так ошибки безопасности есть везде, просто гдето их легко найти гдето тяжело, но на все 100% безопасного ПО нет. Все измеряется только количеством времени которое нужно истратить на поиск уязвимости и ее использования.
набрав их в адресной строкеИменно поэтому и выносят ядро выше корня и в идеале должен остаться только 1 index.php через который и должен идти роутинг на основании $_SERVER['REQUEST_URI'], а не $_REQUEST['q'] и т.п.
В случае с контроллерами ничего удивительно, т.к. они и задумывались для того, чтобы к ним обращались на прямую. Правда странно, что тут авторы не подумали про маршрутизацию наплодили туеву кучу файлов однотипного содержания.
Есть мнение, что это остатки чего-то старого.
Ибо в дополнениях используется обычно всего один коннектор, который всё разруливает.
Ибо в дополнениях используется обычно всего один коннектор, который всё разруливает.
Ибо в дополнениях используется обычно всего один коннектор, который всё разруливает.Подозрительный коннектор. На LFI смахивает, но потом посмотрю:-)
Уже хот фикс в репозитории лежит можно ставить заплатку
Да я уже все сайты обновил на 2.2.8 =)
А про тикетс вопрос не подскажешь?))))))))))))) или не заметил
У меня на сайте причудливые глюки появились((
по всему сайту появились ссылки на одно из страниц этого же сайта причем если открыть исходный код то ничего этого не видно, разве что только через просмотр кода элемента или файрбаг.
не могу понять моей ли рукожопостью вызваны они, аль кто воспользовался этой уязвимостью, да и самое страшное не могу понять как же от них избавиться
по всему сайту появились ссылки на одно из страниц этого же сайта причем если открыть исходный код то ничего этого не видно, разве что только через просмотр кода элемента или файрбаг.
не могу понять моей ли рукожопостью вызваны они, аль кто воспользовался этой уязвимостью, да и самое страшное не могу понять как же от них избавиться
ищите в яваскриптах (файлы с расширением .js)
да я изначально проверил все скрипты, потом даже по очереди все скрипты вырезал ничего не пропало, потом вообще отключил скрипты в браузере, тоже никуда эти ссылки не пропали, базу даже прошеристил уже не знаю где и смотреть, а проблема тем делом развивается на той странице, на которую адресуются эти ссылки, вылетели картинки с галереи и весь текст выделился ссылкой на эту же страницу. в ресурсах эту страницу удалить не могу отключить тоже, выдает окно что этот ресурс настроен как главная страница сайта, в настройках провели главной установлена та которая главная. Также интересно что id этого ресурса не отображается совсем
Напиши Евгению Борисову — поможет.
Кстати, личных сообщений в вашем блоге не хватает )
Киньте ссылка на сайт и данные для авторизации я могу глянуть
Вот на этот адрес smirnov1982kolya@yandex.ru
Вот на этот адрес smirnov1982kolya@yandex.ru
Спасибо с проблемой не разобрался но избавился с помощью бекапа базы.
сегодня засек что кто-то по админке лазит. просто офигеть. а сначала не придал значения этому обновлению.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.