- PVSM.RU - https://www.pvsm.ru -

Rails — уязвимость в JSON парсере, и не только

Считаю своим долгом поделиться с хабром, если вдруг вы не читаете hacker news.
Да, опять Rails, опять критическая уязвимость [1]. JSON.

Это просто плевок в спину от самого надежного формата: оказывается JSON парсер (дефолтный) поддерживает такой аттрибут как json_class и позволяет инстанцировать любые .json_creatable? объекты. И делает это он без оглядки — просто берет const_get(user_input) который с легкостью приводит к DoS, тк const_get генерирует символы никогда не убираемые Garbarg collector-ом.

А с помощью JSON::GenericObject можно творить еще большие чудеса

x=JSON.parse('{"json_class":"JSON::GenericObject", "foo":"bar"}')
x.foo
=> "bar"


Вот пример как это может привести к SQL инъекции [2]. Есть инфорация о рабочем RCE(выполнение удаленного кода) под все рельсы, через вот эту вот прелесть. [3]

Да, есть еще две уязвимости но они скорее для отвлечения внимания — attr_protected никто не использует а options= прямой ассайнмент опций тоже мало кажется актуальным, поэтому не пишу о них. рубисты, выучим урок? [4]

Автор: Chikey

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ruby/26917

Ссылки в тексте:

[1] Да, опять Rails, опять критическая уязвимость: http://weblog.rubyonrails.org/2013/2/11/SEC-ANN-Rails-3-2-12-3-1-11-and-2-3-17-have-been-released/

[2] Вот пример как это может привести к SQL инъекции: http://www.zweitag.de/en/blog/ruby-on-rails-vulnerable-to-mass-assignment-and-sql-injection

[3] через вот эту вот прелесть.: https://github.com/ruby/ruby/blob/v1_9_2_381/ext/json/lib/json/add/rails.rb#L10

[4] рубисты, выучим урок?: http://homakov.blogspot.com/2013/02/rails-vulnerabilities-learning-lesson.html

[5] Источник: http://habrahabr.ru/post/169095/