Параметры Rails И Gc

У нас есть сообщество здесь, в Rails снова драма .

Первоначальный отчет. Существуют такие методы, как find_by_*, которые проецируются на модели, например, в find_by_title и find_by_id. Их можно использовать вот так find_by_id(params[:id], выберите: «ПОЛЬЗОВАТЕЛЬСКИЙ SQL») Но обычно их используют вот так find_by_id(параметры[:id]) И SQL-инъекция происходит, если params[:id] содержит {:select => «CUSTOM SQL»} — опции также могут быть в первом аргументе.

Обратите внимание: :select — это символ, а не «select» (строка).

Это означает, что трюк Эid[select]=SQL не сработает, поскольку ключ будет строкой.

И вообще, params — это хеш типа HashWithIndependentAccess. В его ключах в принципе не может быть символов, потому что.

все они уничтожаются при создании.

Есть такой гем authlogic, обычно он использует find_by_token(token), где token — это объект из сессии (который хранится в куках и подписан session_secret).

Чтобы записать в него :select => «SQL», нужно знать session_secret, поэтому уязвимость встречается крайне редко.

Вся эта идея с SQL-инъекцией CVE не стоит и выеденного яйца! И какова цель поста? ДоС! Я просто начал копать дальше, потому что Я уже давно использую альтернативные входы .

Rails по умолчанию принимает три типа request.body: XML, JSON, x-www-form-urlencoded. Подавляющее большинство приложений используют последний, это строка вида key=val&key2=val2. Но если клиент отправляет необходимый Content-Type, то автоматически будет использоваться другой парсер — XML/JSON и даже YAML, но он отключается по умолчанию.

А XML — гибкая вещь.

Пример: если вы отправите

  
   

<id type="symbol">all</id>

тогда код find(params[:id]) будет выполнен так же, как и find(:all) Или

<id type="yaml">---.

</id>

Пользовательский ввод превращается в символы — символы не удаляются сборщиком мусора.

Этим скриптом из консоли браузера можно «обидеть» рельс приложения (скрипт был удален, чтобы скрипткиддис не использовался).

Попробуйте на локальном хосте и понаблюдайте за памятью рубинового процесса.

патч для application.rb, отключающий альтернативные парсеры ActionDispatch::ParamsParser::DEFAULT_PARSERS={} P.S. но это не все (существует возрождение старого CVE с [1, nil] через полезную нагрузку JSON/XML) Теги: #ruby #xml #егор хомяков #информационная безопасность #ruby #ruby на рельсах

Вместе с данным постом часто просматривают: