Николай Ланец
4 нояб. 2016 г., 3:58

Заповедь для параноиков: указывать сложный table_prefix при установке MODX

Сразу жути наведу: все очень плохо. Имея доступ в админку даже с самыми-самыми минимальными правами, можно поднять права пользователя до sudo довольно просто. Понятно дело, что если знать как (или если я, к примеру, выложу здесь JS-скрипт, который гарантировано сработает сейчас на любом MODX Revo сайте). Скажу только, что общий механизм работает через SQL-инъекции. И вот здесь момент: чтобы воспользоваться этим, надо знать префикс таблиц в MODX. Сейчас, к сожалению, эта информация доступна для чтения в самом браузере (находясь в админке). Если оперативно примут пулл-реквест, то обновив MODX, уже можно будет себя несколько обезопасить. Но не получится совсем обезопасить. Если у вас будет базовый префикс modx_ или какой-то простой типа prfx_, то методом перебора можно будет довольно быстро выполнить атаку (здесь всего примерно 30^4, то есть 810 000. По 10 запросов в секунду за 22 часа можно перебрать все возможные варианты). По этой причине советую сложные префиксы давать типа My_PrfX234_. Здесь уже и маленькие, и большие буквы, и цифры, а это уже 70^10 или 2824752490000000000 вариаций. Вот это уже просто времени не хватит подбирать. Если злоумышленник не будет знать префикса таблиц, SQL-инъекцию ему будет практически нереально выполнить.
А что делать с уже работающими сайтами? Как поменять им префикс таблиц? Накидал вот скрипт на изменение имен таблиц:
<?php ini_set("max_execution_time", 0); ignore_user_abort(true); $current_prefix = $modx->config['table_prefix']; $new_prefix = 'My_Prefix234_'; $stmt = $modx->query("SHOW TABLES"); $tables = $stmt->fetchAll(PDO::FETCH_NUM); $stmt->closeCursor(); foreach ($tables as $table) { $table = reset($table); $preg = "/^{$current_prefix}/u"; if (preg_match($preg, $table)) { $new_table_name = preg_replace($preg, $new_prefix, $table); $sql = "RENAME TABLE `{$table}` TO `{$new_table_name}`"; if ($s = $modx->prepare($sql)) { $s->execute(); } } } print "\nTables are updated";
Выполняете в консоли, после чего идете правите префикс в core/config/config.inc.php и удаляете папку core/cache.
Не забывайте про бэкапы!
UPD: Имейте ввиду, вьюхи переименовывает, но не переименовывает названия таблиц в их запросах, надо будет вьюхи пересобирать, если вы их используете.
UPD2: В общем, я нашел метод взлома без авторизации в админке. Пришлось покопаться, но метод есть и он касается всех версий MODX. Спасает только одно — кастомные префиксы таблиц и как дополнение — скрытые коннекторы.
UPD3: Весьма активное обсуждение развернулось на modx.pro
скрытые коннекторы
Это то что в версии Advanced Distribution есть?
Честно скажу — никогда не пробовал Advanced ставить. Надо попробовать на досуге… А вообще, подправить из можно и на боевом сайте, просто переименовать папку и подправить настройки core/config/config.inc.php
Подскажите пожалуйста, что такое «вьюхи»? Не могу догнать)
view — представления, такой тип виртуальных таблиц в базах данных. habrahabr.ru/post/47031/
Спасибо за разъяснение!
А если скрыть коннекторы, не меняя префиксы таблиц, Ваш метод взлома по прежнему будет актуален? Страшно менять префиксы, зная что могут быть возможные проблемы c view (так как не знаю, есть ли они, используются ли они в компонентах, а если да — то в каких)
Нет, префиксы как раз важней, чем скрытость коннекторов. Вряд ли вы используете вьюхи. Вообще мало кто их используют, только очень опытные операторы баз данных, так что можете делать бекап сайта и пробовать обновлять префиксы приведенным выше скриптом. Но опять-таки, зависит еще от ценности сайта.
В Advanced Distribution можно путь в папке connectors изменить.
А кастомные префиксы таблиц мне кажется это обязательное дело и в идеале при установке должны предлагать кнопу «Сгенерировать прификс», как при создания пароля.
Забыл написать, спасибо за найденую проблему
Спасибо за скрипт, хоть логи отборно руганулись, но всё сработало.
Логи в конце ругаются, потому что сессии на базе данных же тоже, и он не может сессию записать по завершению скрипта, но это не страшно.
Угу, просто выглядит сначала страшно, пока не прочитал.
Кстати, где-то читал про «закалку» модх, так там советовалось менять всё: адрес конектора, адрес менеджера и префикс таблицы тоже затрагивался. Больше всего удивило что modx.pro на этом ты расковырял, ну да ладно.
И на старуху бывает проруха. К тому же я слишком хорошо знаю MODX. Далеко не каждый сможет это сделать.
А что вы скажете по поводу последних сообщений на сайте модх про некого zenit: «Абсолютно бесполезная вещь с заменой префикса, и нихрена его не долго брутить. Крутишь слепую скулю — проверяешь каждый символ по очередно и за 5 мин твой My_PrfX234_ подбереться. Тут просто cms гомно в плане безопасности „ Я просто немного шокирован, учитывая, что он как-то изменил свой комментарий после бана на сайте…
К вам на улице подбежит голый чувак и начнет что-то задвигать про то, как надо правильно жить. Вы броситесь выслушивать его внимательно? Зачем же вы здесь не ясно кого слушаете? Не знаете что такое Троль в интернете? Не кормите троля. На счет переборов было написано здесь же в статье, и там в паре комментариев. Если он за 5 минут переберет 70-100 в десятой степени вариантов, то с чего вдруг у нас сайты с парой тысяч документов тормозят? Простая арифметика не позволит этого сделать.
Ну насторожило только то, что он после бана отписался как-то, вернее отредактировал сообщение свое. + он говорил о том, что символы поочередно проверять на совпадение можно. Вы поймите меня правильно, ваши рекомендации уже сделал. Я конечно же не принимаю ничего на слепую веру, но ваше мнение мне интересно.
Идите прочитайте, это Василий так пошутил.
Только был там и ничего не было)) Ну и шуточки у Василия, у меня прям апатия началась утром… Ну спасибо, что прояснили!
Николай, а если нет доступа к консоли, есть только ISP панель и PhpMyAdmin… как еще можно префикс сменить?
Необходимо воспользоваться компонентом Николая Console (поищите в официальном репозитории), наверное именно его имел ввиду Николай, когда говорил о необходимости выполнения скрипта в консоли.
Да, он имел в виду именно его.
Да, вчера уже нашел этот компонент, а в целом достаточно ли руками в phpmyadmin в базе руками изменить префикс каждой таблицы + core/config/config.inc.php? или еще где-то нужно править?
Достаточно, но просто дольше.
Благодарю… кстати возникла идея, сделать бекап базы… затем в редакторе типа notepad++ заменить на лету префикс и поднять еще одну базу данных на сервере + в настройках помимо префекса еще и имя базы сменить…
так Николай скрипт выше написал чтобы автоматизировать и ускорить процесс смены префикса. Вы конечно можете сменить префиксы любым доступным ручным способом — но если у Вас не один сайт выполненный на MODX — то делать это вручную как-то геморно и не по-программстски) А имя базы роли, на сколько я понимаю, особой не играет
У меня просто интернет-магазин на 2000 товаров… стремно скрипт на боевой базе запускать (пусть даже бекапы есть)
Всегда пользуюсь только версией advanced. Вы осознанно, уменьшаете аудиторию которая хотела бы пользователями вашими пакетами. Не надо придумывать за пользователя какие папки должны быть у пользователя. Надо всего лишь получать данные из файла config пользователя. Вам не приходило в голову, что у пользователя папка connectors может иметь другое название? Вам ведь говорили. Так чего теперь бегать и кричать уязвимость? Это было очевидно, что мер по обеспечению безопасности много не бывает. Если вы не видели на тот момент уязвимости, это не означало, что её нет.
Вам ведь говорили.
Сборка ставится на уже установленный сайт. Если вы при установке указали кастомные УРЛы, то и NewsModxBox установится в кастомные папки. И я не бегаю и не кричу, а публикую информацию. Всяко больше пользы, чем от вас.
Да как она могла в кастомные папки если вы игнорировали то, что написано в пользовательских конфигах, Вы считали что прописывать жёсткие пути круто.
Иван, я никогда не считал, что жесткие пути — это круто. Если где-то и были жесткие пути прописаны, то это от лени, а не потому что это круто. Все, расходимся, вопрос ни о чем. Мало того, что пользуетесь чужими трудами бесплатно, так потом приходите еще претензии высказываете. Потом делай для вас репозитории бесплатные. Ничего бесплатного больше не будет, во всяком случае от меня лично.
Я не ставлю под сомнение, что Вы являетесь одним ведущих специалистов MODX. Но раз Вы добились такого статуса, надо и критику воспринимать спокойней. Я благодарен за Ваши труды, лично мной был получен большой объём информации, полезность которой даже трудно оценить. Закончим на позитивчеке )
Николай доброго времени суток! Так а ваш пулл-реквест уже принят в обработку? и Будет ли принят? Если Вам не трудно Николай, можете свое мнение изложить на эту проблему, и собственно ваше видение, как и когда эта проблема в реальности появилась? С самого начала жизни MODX или уже совсем позже?
Добрый день.
Пуллреквест только запрещает вывод некоторых системных настроек (включая префикс таблиц). Это помогало в админке, но только до тех пор, пока я не нашел механизмы без авторизации в админке. То есть первый этап взлома был из самой админки с минимальными правами. Но вот когда нашел способы без авторизации в админке, то данный багфикс там уже не помогает (хотя и не лишний). То есть этот багфикс помогает только в том случае, если префиксы изменены, но есть доступ в админку.
Как давно были эти проблемы? По видимому всегда.
Как будет время, попробую подлатать немного, на сколько получится. Как минимум залатаю то, через что сам могу пройти.
Спасибо большое за информацию, очень рада, что нашла Вашу статью сейчас. Как раз делаю сайт, хорошо, что заранее узнала про это, переделывать было бы непросто)
Николай, добрый день. Если можно, то хотелось бы еще спросить вашего совета, какие права доступа лучше выставлять при установке Modx Revo? 777- опасно, насколько я знаю.
775 для папок и 664 для файлов. Можно 755 и 644 соответственно.
Но лучше, чтобы не делать в слепую и понимать, советую разобраться с правами доступа в linux. Материала в интернете море.
Блин вот просто хочу сказать спасибо. Хоть тему и давно обкатали, но я только сейчас смог побороть лень и загуглить про взлом modx, что бы обезопасить боевые проекты. Возможно уязвимость исправили, так как уже прошло n-ое время, но я все равно сделаю изменения)

Добавить комментарий