URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 84830
[ Назад ]

Исходное сообщение
"Критическая уязвимость в Ruby on Rails"

Отправлено opennews , 01-Июн-12 16:52 
В web-фреймворке Ruby on Rails (http://rubyonrails.org/) выявлена уязвимость (https://groups.google.com/group/rubyonrails-security/browse_...), позволяющая удалённому злоумышленнику организовать подстановку 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 (http://weblog.rubyonrails.org/2012/5/31/ann-rails-3-0-13-has.../), 3.1.5 (http://weblog.rubyonrails.org/2012/5/31/ann-rails-3-1-5-has-.../) и 3.2.5 (http://weblog.rubyonrails.org/2012/5/31/ann-rails-3-2-5-has-.../) (выпуск 3.2.4 отменён из-за регрессивных изменений). Похожая проблема зафиксирована в коде разбора параметров в Rack при использовании ActionPack, но она позволяет лишь вставить в SQL-запрос условие "IS NULL".


URL: http://secunia.com/advisories/49297
Новость: http://www.opennet.me/opennews/art.shtml?num=33992


Содержание

Сообщения в этом обсуждении
"Критическая уязвимость в Ruby on Rails"
Отправлено Аноним , 01-Июн-12 16:52 
Гитхаб уже взломали?

"Критическая уязвимость в Ruby on Rails"
Отправлено Аноним , 01-Июн-12 17:01 
Спроси у Хомячкова.

"Критическая уязвимость в Ruby on Rails"
Отправлено Аноним , 01-Июн-12 17:30 
> Гитхаб уже взломали?

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


"Критическая уязвимость в Ruby on Rails"
Отправлено Аноним , 01-Июн-12 20:27 
Простите, почему ещё три года назад в документации гооврилось что так параметры не нужно передавать именно из-за вероятности подобных инъекций? Косяк в новости.

"Критическая уязвимость в Ruby on Rails"
Отправлено anon9 , 01-Июн-12 21:01 
> Простите, почему ещё три года назад в документации гооврилось что так параметры
> не нужно передавать именно из-за вероятности подобных инъекций? Косяк в новости.

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


"Критическая уязвимость в Ruby on Rails"
Отправлено Ищавин , 02-Июн-12 00:58 
Как строку, Post.where(:id => params[:id].to_s).all

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


"Критическая уязвимость в Ruby on Rails"
Отправлено Michael Shigorin , 02-Июн-12 02:19 
> понятно, что поссонам влом читать доки к фреймворку

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


"Критическая уязвимость в Ruby on Rails"
Отправлено Ищавин , 02-Июн-12 13:45 
Это не рекомендуемый способ делать запросы такого вида, смотрите коммент ниже.

"Критическая уязвимость в Ruby on Rails"
Отправлено хзкто , 02-Июн-12 10:03 
что-то не нашёл сейчас в мануале никаких предупреждений на этот счёт.
Если оно там действительно есть, то это же ещё хуже чем просто баг - это любовно разложенные грабли, за которые надо отрывать руки

"Критическая уязвимость в Ruby on Rails"
Отправлено Ищавин , 02-Июн-12 13:44 
Это просто глупый пример. 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'е), так и еще шаг вправо-влево — выстрел в ногу.


"Критическая уязвимость в Ruby on Rails"
Отправлено Аноним , 03-Июн-12 02:32 
>Ноде все нестандартизировано

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

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

???


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


"Критическая уязвимость в Ruby on Rails"
Отправлено Ищавин , 03-Июн-12 15:50 
Ничего не понял. Здесь не о лыжах тема, вы ошиблись, наверное.

"Критическая уязвимость в Ruby on Rails"
Отправлено Аноним , 03-Июн-12 22:18 
Пословицы и поговорки еще не проходили?

"Критическая уязвимость в Ruby on Rails"
Отправлено Ищавин , 03-Июн-12 22:40 
«Какой вопрос, такой и ответ». Вот эту я точно знаю.

"Критическая уязвимость в Ruby on Rails"
Отправлено kuraga , 03-Июн-12 17:09 
Ruby - очень компактный язык, на меньшем количестве строк кода можно написать большее.

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

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

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


"Критическая уязвимость в Ruby on Rails"
Отправлено ACCA , 04-Июн-12 07:03 
О времена, о нравы...
На кой тебе тормоза, которые тормознее даже жабаскрипта?

Покури Perl. Там тебе и психоделики Moose и скорость XS.

Я вот недавно переписал голый Perl сначала на голый C - ускорился в 5 раз. Потом ввод-вывод вернул в Perl - отжал ещё 20%. Разбираться, почему while(<>){} на 20% быстрее кода на C (тупо дёргать буфера по 4М, потом через strchr наковыривать строчки), не стал - всё равно вязать через XS.


"Критическая уязвимость в Ruby on Rails"
Отправлено хзкто , 04-Июн-12 10:32 
> На кой тебе тормоза, которые тормознее даже жабаскрипта?
> Покури Perl.

Взаимоисключающие параграфы: js (v8, который юзается в node.js) намного быстрее перла. И модули на Си++ там подключать тоже очень просто


"Критическая уязвимость в Ruby on Rails"
Отправлено ACCA , 10-Июн-12 06:33 
>> На кой тебе тормоза, которые тормознее даже жабаскрипта?
>> Покури Perl.
> Взаимоисключающие параграфы: js (v8, который юзается в node.js) намного быстрее перла.

Специально бросил всё, стал проверять на своих задачах. Не быстрее, хотя и не медленнее.

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


"Критическая уязвимость в Ruby on Rails"
Отправлено kuraga , 04-Июн-12 11:29 
> О времена, о нравы...
> На кой тебе тормоза, которые тормознее даже жабаскрипта?
> Покури Perl. Там тебе и психоделики Moose и скорость XS.

А мне не надо быстрый. Мне надо - либо C/C++, классика; либо логичный и красивый, и, если ООП, то тотально-ООП, интерпретатор. И это - Ruby. Просто мне жаль, что в него не вкладывают так, как в JavaScript.