Fi1osof

Fi1osof

С нами с 05 мая 2014; Место в рейтинге пользователей: #10
Fi1osof
06 ноября 2016, 18:54
+2
Это сейчас на слабо проверка?
Никакой проверки на слабо. Я описываю сейчас не теории, а реальный результат. То есть пошел, сломал, написал. Ты сейчас теоритизируешь (при всем моем уважении.)
Банальный брутфорс по 1 символу.
Если ты вдруг читал исходную статью, то там я писал устанавливать сложные префиксы. Даже немного математики было:
Если у вас будет базовый префикс modx_ или какой-то простой типа prfx_, то методом перебора можно будет довольно быстро выполнить атаку (здесь всего примерно 30^4, то есть 810 000. По 10 запросов в секунду за 22 часа можно перебрать все возможные варианты). По этой причине советую сложные префиксы давать типа My_PrfX234_. Здесь уже и маленькие, и большие буквы, и цифры, а это уже 70^10 или 2824752490000000000 вариаций. Вот это уже просто времени не хватит подбирать.
Ты сейчас вообще php-код приводишь. То есть предполагается, что твой скрипт будет работать на стороне целевого сервера уже? Если у тебя там php твой работает, то какой смысл? Уже все сломано. А если ты им просто фигачишь запросы на целевой сервер, то с учетом задержек даже идеальных 10 мсек с учетом вычислений выше как быстро ты получишь результат?
Fi1osof
06 ноября 2016, 18:47
0
$modx->getObject('modResource', array(
'modResource.id`IN (SELECT 1,1,1,1,1,1,1,1,1,1,1,1,1,1)#' => ''
));
А это что должно делать? Кроме возможности вставить подзапрос на выборку ничего не увидел, а update-запрос здесь не увидел возможность вставить.

Кстати, если поиграться с запросом, можно даже такое получить: SQL injection attempt detected.

А еще есть возможность создания произвольных файлов на сервере.
Есть или была? Я проверял все процессоры на работу с файлами, они защищены. Но может что-то проморгал.
Fi1osof
06 ноября 2016, 18:33
0
Я так и не понял чем смена префикса вас обезопасит
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE '%users'
Да, такой запрос можно выполнить, но вот увидеть его результаты — очень сложно. Модифицировать запрос так, чтобы подменить ему выводимые колонки — такого не получалось. Получалось только выполнить втемную. А втемную — это уже никак, если не знаешь префиксы. Сам попробуй сломать сайт с кастомными префиксами.
Fi1osof
06 ноября 2016, 18:14
+2
Речь идет не о самом снипете, а о хуке к нему для поиска в своих таблицах.
Вопрос тогда больше к своим сниппетам, а не к компоненту.
А вот это:
$main = array(
'tablePrefix' => 'modx_', //The fix
правильней переписать на
$main = array(
'tablePrefix' => $modx->config['table_prefix'], //The fix
Во всяком случае в рамках парадигмы конкретно этого случая.
Fi1osof
06 ноября 2016, 17:19
0
Полная переписка — это перемешивание сразу нескольких тем, ну да не важно. Ты таким образом хотел сказать, что мне не была известна эта уязвимость или что именно? Или обсуждение данного вопроса ты не считаешь консультированием?
Fi1osof
06 ноября 2016, 16:22
+1
Речь об этом компоненте? Можете ссылку дать на конкретную строчку кода, где там используется префикс?
Fi1osof
06 ноября 2016, 15:55
+1
У тебя разве пользовательские запросы выполняются в рамках контекста mgr? Не думаю. А при переключении, пользователь работает в текущем контексте без примеси админского пользователя, так что проверка должна чисто идти.
Fi1osof
06 ноября 2016, 15:52
+1
Василий, сорри за рекламу, но поставь уже SwitchUser и проверяй от лица конкретного пользователя. modstore.pro пользуются же им.
Fi1osof
06 ноября 2016, 13:18
+1
На твоем tickets так же прошло. pdoTools не позволяет.
К слову, здесь хотел бы показать как я борюсь с подобным. Уже очень давно у меня практика принята все входящие вызовы процессоров проверять жестко. Здесь из коннектора запросы могут идти только на один паблик-процессор, где уже на уровне метода getInstance() решается можно запрошенный процессор выполнить или нет. Да, не очень удобно, зато гораздо надежней.
Fi1osof
06 ноября 2016, 13:06
+1
Удаление сейчас через БД, но будет кнопка, это не сложно.
Фильтра и прочее тоже будет, просто чуть позже.
Fi1osof
06 ноября 2016, 10:57
+3
Константин, не факт, что эту проблему можно решить на корню. Здесь слишком много аспектов. Смена префикса — это скорее всего и есть решение проблемы на корню. Да, многим не привычно и не удобно может быть, но при установке сменить префикс — это несколько символов вбить.
Fi1osof
06 ноября 2016, 10:31
+3
Не за что.

Про битрикс: если бы я его изучал 7 лет, как MODX, наверняка я там еще больше дыр нашел бы. В целом MODX довольно хорошо защищен, далеко не каждый взломает.

Есть еще проблемы и как они решаются?
Я писал довольно много здесь про другие дыры, стоит перечитать комменты. Так или иначе, практически от всех этих уязвимостей спасает смена префиксов.

Парни из modx что-то ответили? или надо их сайт взломать, чтоб они поняли…
Они взяли на заметку. В отличие от нас буржуи привыкли в выходные отдыхать. Наверняка завтра примут PR. Но этот ПР не решение проблемы в целом, префиксы менять все равно надо.
Fi1osof
06 ноября 2016, 10:23
+2
сайт/manager/?a=system/info виден префикс
Это защищенный процессор, надо иметь админские привилегии.
Fi1osof
06 ноября 2016, 10:21
+2
Кстати, хочешь еще больше жути? Я только что провел успешную атаку через коннектор компонента Gallery. При чем это касается большинства сторонних компонентов. На твоем tickets так же прошло. pdoTools не позволяет. Суть в том, что у них них же тоже коннекторы есть, и они в итоге долбятся в системный коннектор. А там уже и в системные процессоры достучаться можно.
И здесь опять-таки, спасают кастомные префиксы таблиц.
Fi1osof
06 ноября 2016, 10:14
+1
Василий, я никому не навредил, и ничьи данные даже не смотрел (только свои). Я даже не смотрел сколько там пользователей у вас. Вообще ничего такого.
Fi1osof
06 ноября 2016, 10:13
+1
И что, блин? Это вообще теперь не имеет никакого смысла, если любой сайт можно сломать хоть откуда, если у него стандартный префикс таблиц.

Более того, префикс таблиц теперь приравнивается к паролю супер-админа, его нужно хранить за семью печатями! Вот что нужно было написать, а не как сейчас.
Вот тут оговорочка — смысл есть. Дело в том, что пока патч не примут (и пока не обновятся до последней версии), префикс можно будет тупо получить из настроек системы. Сейчас процессор жестко проверяет на авторизацию в mgr, нельзя тут переопределить контекст. А если пользователь авторизован в mgr, то он может получить настройки, в том числе и префикс таблиц.
Fi1osof
06 ноября 2016, 09:25
+1
Ну я вроде и не сломал ничего, так, чуть себя подправил да документ один свой… Ну и чуть больше о структуре магазина узнал (только в плане какие типы сущностей используются, не более).
Fi1osof
06 ноября 2016, 09:21
+1
И еще кстати — в текущей заметке этого UPD2 до сих пор нет.
Если эту тему развивать, то там уже надо UPD3, писать, UPD4 и еще несколько. К примеру, помнишь же игры с контекстами, которые тогда Женя проводил, и которые и послужили тем грубым багом, из-за которого сайты массово валили? Это же я тогда Женю консультировал joxi.ru/LmGVQx0uRQbx5r
Понятно дело, что он многое сам домыслил и доделал, но сама бага мне была понятна и очевидна, и я про нее говорил Райну тоже, но он действительно отмахнулся, а я не стал развивать тему и ломать им сайт. Так вот, багу не совсем закрыли, точнее, сама архитектура MODX-а такова, что все эти уязвимости во многом являются не багами, а фичами. Это такой механизм безопасности. И уязвимости можно задействовать даже с передачей существующего контекста, если политики не правильно настроены (ведь даже аноним по сути автоматом авторизован в контексте web, а это значит уже НЕ НЕ авторизован). Кстати, что интересно, воспользоваться этим механизмом позволяет как раз JS-компонент MODx, который не сложно подключить даже на фронт сайта просто через редактирование HTML-а, а если можно попасть на входную страницу админки, так вообще проблем нет никаких.
По сути, если ты хочешь дать кому-то права на выборки документов и прочих элементов, давать их надо не на контексты, а на конкретные элементы. Но тут проблема в неудобстве сразу встает — если ты хоть кому-то дал права на какие-то группы элементов, значит все остальные сразу лесом пойдут, то есть придется всем остальным так же права прописывать.
Есть у меня одна хорошая, но довольно сложная статья, которая несколько проливает свет на все это.
А так можно, к примеру, получить список всех сниппетов и плагинов на сайте. Да, модифицировать их не получится, но если проанализировать их кода хорошенько, можно попробовать найти какие-нибудь логические ошибки, особенно там, где используются механизмы формирования ключей для автоматической авторизации пользователей, проведения платежей и т.п.

В общем, точек входа довольно много, можно несколько отдельных статей написать про них, поэтому я не стал много воды лить, я просто привел максимально эффективное на мой взгляд решение. Практически все эти проблемы решаются сменой префиксов таблиц и сокрытием папки коннекторов.
Fi1osof
06 ноября 2016, 07:29
+4
И до этого много раз об этом говорилось. Ну и что? Осознавать начинаем только тогда, когда реально взлом прошел. Многие просто недопонимают опасности. А она есть. С учетом того, что результат я получил уже в течение часа (а потом в течение пары часов еще несколько дыр), после того как задался вопросом «А смогу?», если кто-то сильно заморочится, то может не за час, но за несколько часов это может сделать. Если вы с MODX более двух лет знакомы, то должны помнить волну взломов MODX-сайтов, пока не выпустили обновленную версию с заплатками. Тогда сайты ломали просто в автоматическом режиме, ходили боты по интернету, находили Рево-сайты и ломали. Так вот, текущие уязвимости из этой же серии, под них можно написать ботов и полетят сайты массово. Конкретно от этой уязвимости спасет кастомный префик таблиц. Поэтому как минимум свои важные сайты обновите.