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


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

  • В его примере 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;
    
  • А тем временем популярность MODX за 2 года упала на 25 пунктов.
    Alt text

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

  • @Agel_Nash На то на других дырок нет

 

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

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

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

    Читать далее