The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

01.06.2012 16:50

В 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".

  1. Главная ссылка к новости (http://secunia.com/advisories/...)
  2. OpenNews: Релиз web-фреймворка Ruby On Rails
  3. OpenNews: Критическая уязвимость во фреймворке Ruby On Rails
  4. OpenNews: В GitHub устранена уязвимость, допускающая внедрение кода в любой репозиторий
Лицензия: CC-BY
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/33992-ruby
Ключевые слова: ruby, rails
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (19) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 16:52, 01/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Гитхаб уже взломали?
     
     
  • 2.2, Аноним (-), 17:01, 01/06/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Спроси у Хомячкова.
     
  • 2.3, Аноним (-), 17:30, 01/06/2012 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > Гитхаб уже взломали?

    Опять для того чтобы фикс вкоммитить? :)

     

  • 1.4, Аноним (-), 20:27, 01/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Простите, почему ещё три года назад в документации гооврилось что так параметры не нужно передавать именно из-за вероятности подобных инъекций? Косяк в новости.
     
     
  • 2.5, anon9 (?), 21:01, 01/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Простите, почему ещё три года назад в документации гооврилось что так параметры
    > не нужно передавать именно из-за вероятности подобных инъекций? Косяк в новости.

    А как их тогда передавать?

     
     
  • 3.6, Ищавин (ok), 00:58, 02/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Как строку, Post.where(:id => params[:id].to_s).all

    Я предлагаю открыть месяц недоуюзвимостей Rails, понятно, что поссонам влом читать доки к фреймворку, так что плавно берем курс на модернизацию фреймворка для «самых маленьких хомяковых».

     
     
  • 4.7, Michael Shigorin (ok), 02:19, 02/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > понятно, что поссонам влом читать доки к фреймворку

    К сожалению, поэтому и ответственность за дефолты такая большая.

     
     
  • 5.10, Ищавин (ok), 13:45, 02/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Это не рекомендуемый способ делать запросы такого вида, смотрите коммент ниже.
     
  • 4.8, хзкто (ok), 10:03, 02/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    что-то не нашёл сейчас в мануале никаких предупреждений на этот счёт.
    Если оно там действительно есть, то это же ещё хуже чем просто баг - это любовно разложенные грабли, за которые надо отрывать руки
     
     
  • 5.9, Ищавин (ok), 13:44, 02/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это просто глупый пример. Post.where(:id => params[:id]).all вполне легальная конструкция, только вот в Rails толку от нее 0, потому как эквивалентна Post.find(params[:id]). Предположим, что там не id, а dummy_user, тогда рекомендуемая нотация ActiveRecord будет такой: Post.where([ "dummy_user = ?", params[:user] ]).all.

    Post.where(:id => params[:id].to_s).all — конечно же костыль, только вот и нотация эта не рекомендована разработчиками, так что если лезешь не туда, не жалуйся если что-то пропустил. И да, я только за то, чтоб за такое рвали руки.

    Я вот недавно портировал один проект с Rails на Node, просто не могу передать отвращения от того, как в Ноде все нестандартизировано, малого того, что сам язык невероятно многословен по сравнению с Ruby (это при том, что писал я на Coffeescript'е), так и еще шаг вправо-влево — выстрел в ногу.

     
     
  • 6.11, Аноним (-), 02:32, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Ноде все нестандартизировано

    ?
    >невероятно многословен по сравнению с Ruby

    ?
    >это при том, что писал я на Coffeescript'е

    ???


    Да это, батенька, не в лыжах дело.

     
     
  • 7.12, Ищавин (ok), 15:50, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ничего не понял. Здесь не о лыжах тема, вы ошиблись, наверное.
     
     
  • 8.14, Аноним (-), 22:18, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Пословицы и поговорки еще не проходили ... текст свёрнут, показать
     
     
  • 9.15, Ищавин (ok), 22:40, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    171 Какой вопрос, такой и ответ 187 Вот эту я точно знаю ... текст свёрнут, показать
     
  • 7.13, kuraga (ok), 17:09, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ruby - очень компактный язык, на меньшем количестве строк кода можно написать большее.

    CoffeeScript - прослойка, транслируемая в JavaScript, представляющая Ruby-подобный синтаксис. Но даже так код не выходит компактным.

    Ну о стандартизации не в курсе...

    JavaScript, зараза, быстрый. Им все занимаются. А Ruby  такой классный! А признания мало... Денег, как следствие, и оптимизированности... Жаль. Ruby - мое все, вот уже два года... Хотя пока большие проекты не делал, и его скорость меня устраивает.

     
     
  • 8.16, ACCA (ok), 07:03, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    О времена, о нравы На кой тебе тормоза, которые тормознее даже жабаскрипта П... текст свёрнут, показать
     
     
  • 9.17, хзкто (ok), 10:32, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Взаимоисключающие параграфы js v8, который юзается в node js намного быстрее ... текст свёрнут, показать
     
     
  • 10.19, ACCA (ok), 06:33, 10/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Специально бросил всё, стал проверять на своих задачах Не быстрее, хотя и не ме... текст свёрнут, показать
     
  • 9.18, kuraga (ok), 11:29, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А мне не надо быстрый Мне надо - либо C C , классика либо логичный и красивый... текст свёрнут, показать
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру