Последние темы


Безопасность ModX

  • @Gulik сказал Безопасность ModX:

    @slaad Да вот читайте с этого места, все станет ясно https://modx.pro/security/10266-critical-vulnerability-in-modx-revolution/#comment-70242

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

    Хронология такая:
    Появляется Зенит и пишет, что префикс ломается брут форсом посимвольным перебором.
    Его просят доказать. Он гнет пальцы. Василий его выкидывает с форума меняя его комментарий (на Злой Василий меня забанил)
    Все пугаются, что Зенит после бана все же исправил коммент. Василий признается, что это сделал он. Все выдыхают свободно.
    Это было до 8 ноября.
    Вчера Зенит вернулся и предоставил префикс таблицы модх про, но ответил на один из ранних постов, из-за чего комментарий отображается выше не по хронологии. После чего Василий снял шляпу и убежал править компоненты.

    Дыра действительно в xPDO и еще бог знает где...

  • @slaad Прощу прощения, не заметил (

  • В его примере 4 символа, а если добавить ещё хотя бы парочку то сервак будет отрубать соединение по таймауту (если он настроен). Жути наводит зачем-то.

    Никто и ничего не отрубит. Проверка 1 символа = 1 запрос на сервер.

    Вот код от Евгения. По-моему это наёбка какая-то. Тут просто символ сравнивается с таким же в пароле, т.е. пароль заранее известен.

    Наебка заключается в том, что это пример реализации разных алгоритмов подбора строки. Но никак не пример того, как сбрутить префикс или данные из базы. Если уж совсем так хочется, то вместо

    ord($char) == ord($str[$i])
    

    мы будем сравнивать ответ от сервера. В этом и смысл слепой SQL-injection. Заставить отвечать сервер по разному если символ подошел и если не подошел. И демонстрацию этого способа я оставил за кадром.

    самый простой, по моему, способ защиты от слепых инъекций это просто ограничивать кол-во символов в параметре, чтобы ломатели не могли строить запросы типа

    Это способ не поможет, т.к. данные могут передаваться разными способами. GET, POST, COOKIE

    Лично в таком варианте, если ID должно быть числом и только числом, его можно просто приводить к типу Integer.

    Да. Такой фикс работает. Ищите упоминание Василия "спасибо за PR" в топике на modx.pro. Просто люди сразу не смекнули чего этот фикс делает.

    Еще вопросы? Или будем дальше утверждать, что я жути навожу?

  • @Gulik да ничего страшного, мне просто тоже не очень нравится как там комментарии отображаются))

  • @Agel_Nash ну да, этот код был в ответ Ланца сколько времени занимает перебор строки разными способами - посимвольно или целиком строкой
    По хорошему самое интересеное в более ранних постах Евгения https://modx.pro/users/agel_nash/comments/?page=4

  • @Agel_Nash

    Никто и ничего не отрубит. Проверка 1 символа = 1 запрос на сервер.

    Ок, согласен.

    В этом и смысл слепой SQL-injection. Заставить отвечать сервер по разному если символ подошел и если не подошел. И демонстрацию этого способа я оставил за кадром.

    Вот и получается, что самое главное закадром 🙂 Поэтому такая была моя реакция. Спасибо, погуглю на эту тему.

    Еще вопросы? Или будем дальше утверждать, что я жути навожу?

    Пока ты ничего не показал конкретного, вопрос не закрыт. Остается поверить наслово и отправиться в гугл.

  • По ссылке от @slaad увидел продолжение от Евгения. Теперь понятно.

    Вообще не понятно зачем было изобретать велосипед xPDO, есть же куча других ORM.

  • @Agel_Nash Я все же особо не пойму почему такая шумиха вокруг этих префиксов?
    Если нашли уязвимый (не фильтруемый) параметр, то ясно, что можно получить доступ ко всему сайту, префиксы не нужны. Или префикс это для демонстрации и только?

  • @Gulik Не было бы никакой шумихи, если бы решение изначально было предложено верное. Я пришел в топик лишь для того, чтобы объяснить людям: смена префикса не панацея и дырку не закрывает.

    @Andchir Ну и хорошо, что теперь нет никаких наебок:-)

  • @Agel_Nash сказал:

    Я пришел в топик лишь для того, чтобы объяснить людям: смена префикса не панацея и дырку не закрывает.

    Спасибо, что не поленился сюда прийти. Согласен, что скрытие префиксов, это не решение. Тут ещё непонятки были как раз из-за странного пулл реквеста от Николая. Плюс сложно уследить за хронологией в древовидных комментариях.

  • @Andchir И это еще один перл. Префикс он прячет из системного конфига который виден только админу. Но Коле этого не объяснить - он же профи. Куда нам до него...

  • @Agel_Nash Ясно, значит просто демонстрация. Я вас взломал! Чем докажешь? Вот вам префикс...
    Все же, кончено, смена префикса несколько замедлит процесс взлома. Ну очень на чуть-чуть))
    После его подбора можно так же идти в таблицу юзеров и подбирать их логин, а затем их пароль в виде хеша... А потом искать этот хеш на cmd5...
    Или все же эта дырка в ModX предусматривает возможность вносить изменения в базу? Запросы UPDATE или INSERT проходят?

  • @Agel_Nash

    Но Коле этого не объяснить - он же профи. Куда нам до него...

    У меня подозрение, что Николай специально хотел приберечь эту дырку для себя, побыть богом это же так приятно 🙂

  • @Andchir сказал Безопасность ModX:

    @Agel_Nash

    Куда нам до него...

    У меня подозрение, что Николай специально хотел приберечь эту дырку для себя, побыть богом это же так приятно 🙂

    Не думаю, не в его стиле что-то приберегать. Мне кажется, он случайно наткнулся и сразу же в сообщесвтво, судя по постам он даже сам не понял что ящик пандоры нашел...

  • @Gulik сказал Безопасность ModX:

    @Agel_Nash Ясно, значит просто демонстрация. Я вас взломал! Чем докажешь? Вот вам префикс...
    Все же, кончено, смена префикса несколько замедлит процесс взлома. Ну очень на чуть-чуть))

    верно

    После его подбора можно так же идти в таблицу юзеров и подбирать их логин, а затем их пароль в виде хеша... А потом искать этот хеш на cmd5...

    Как хеш MODX Revo довольно трудно сбрутить. И cmd5 не поможет. Только если на заказ через фермы.

    Или все же эта дырка в ModX предусматривает возможность вносить изменения в базу? Запросы UPDATE или INSERT проходят?

    Все зависит от конкретного сайта.

    Давайте условимся на следующем. В MODX Revolution на текущий момент есть несколько дырок. Эксплуатация этих дырок усложняется рядом условий которые должен выполнить разрабочтик компонента.

    [Вырезано админом от любителей ломать сайты]

    P.S. После прочтения удалите мой комментарий. Чтобы на весь мир не светилось.

  • А вот и продолжение дыры с xPDO :https://modx.pro/security/10345-blind-sql-xpdo/

    и вполне логичный ответ разработчика - забота о безопасности - дело рук разработчиков. Т.е. прежде чем запихивать запросы в xPDO их нужно фильтровать

    Ну собственно сами виноваты - сначала долго кричали, что вместо сложных SQL проще писать через xPDO, которое еще и безопасно. Последнее оказалось неверно.

  • Почему же они тогда сами не фильтруют? Ведь по словам Евгения у них на modxcloud дыры эти есть

  • @timm Если правильно понял Евгения и opengeek, то эта дыра есть в компонентах написанных на xPDO в чистом MODx дыр нет.
    А в компонентах дыры потому, что разработчики были уверены, что xPDO фильтрует SQL, оказалось, что нет.

  • @timm Если правильно понял Евгения и opengeek, то эта дыра есть в компонентах написанных на xPDO в чистом MODx дыр нет.

    Есть. Но конкретно этой - нет.

    А в компонентах дыры потому, что разработчики были уверены, что xPDO фильтрует SQL, оказалось, что нет.

    Да.

  • Да уж... тут явная недоработка в архитектуре ORM, видимо автор совсем не интересуется опытом других разработчиков. Давать такие широкие возможности через один метод - не очень красиво. Программисты, привыкшие к языкам со строгой типизацией, ужаснулись бы от увиденного.

    Хотя пихать в какой-то метод сырые данные, не убедившись в безопасности, это тоже не хорошо.
    В сниппете userOrders, например, сделано так:

    $order_id = !empty( $_REQUEST['ord_id'] ) && is_numeric( $_REQUEST['ord_id'] )
          ? $_REQUEST['ord_id']
          : 0;
    
 

Последние комментарии

  • Не знаю в какую тему положить, поэтому пусть будет здесь. Тем более как раз в тему аудита.
    Сервис по анализу скорости - https://gtmetrix.com/ - более детально расписывает чем google speed
    Бесплатный CDN - https://dash.cloudflare.com/ - Если кто то запарится на эту тему.

    Читать далее
  • Андрей, большое спасибо за развернутый анализ. Некоторые ошибки к сожалению не успел просто исправить после неудачного восстановления бекапа (max-height в фильтрации например, уже вернул).

    Читать далее