Критическая уязвимость в Ruby on Rails

В web-фреймворке Ruby on Rails выявлена уязвимость, позволяющая удалённому злоумышленнику организовать подстановку SQL-кода. Проблема вызвана отсутствием должной проверки вложенных параметров запроса в коде Active Record. В частности, конструкция "Post.where(:id => params[:id]).all" в коде Active Record напрямую передает внешние параметры в блок WHERE SQL-запроса, что позволяет атакующему передать параметры, в результате которых params[:id] вернёт специально изменённый хэш с содержимым дополнительных условий для блока WHERE. В результате, атакующий может получить доступ на чтение к содержимому таблиц в текущей БД, например, содержащих параметры аутентификации или конфиденциальные данные.

Уязвимость появляется только в Ruby on Rails 3.x при использовании в приложениях Active Record для доступа к БД и включении поддержки вложенных параметров. Проблема устранена в корректирующих обновлениях Ruby on Rails 3.0.13, 3.1.5 и 3.2.5 (выпуск 3.2.4 отменён из-за регрессивных изменений). Похожая проблема зафиксирована в коде разбора параметров в Rack при использовании ActionPack, но она позволяет лишь вставить в SQL-запрос условие "IS NULL".

© OpenNet