Опубликовал usa 22-02-2013
Перевел: gazay
Уязвимость недоступности сервиса и небезопасного создания объекта во встроенном в ruby JSON. Этой уязвимости назначен CVE идентификатор CVE-2013-0269. Мы строго рекомендуем обновить ruby.
Детали
При прочтении JSON-документов, JSON гем (включая встроенный в ruby) может быть вынужден создать символы Ruby в атакуемой системе. Так как Ruby символы не уничтожаются при сборке мусора, это может служить причиной атаки недоступности сервиса (DoS).
Та же техника может быть использована для создания объектов в атакуемых системах, которые действуют как внутренние объекты. Эти “действующие как” объекты могут быть использованы для преодоления механизмов безопасности и как трамплин для SQL injection атак в Ruby on Rails.
Опасный код может выглядеть как-то так:
Где `user_input` переменная содержит документ типа такого:
{"json_class":"foo"}
JSON гем будет пытаться найти константу "foo". При попытке нахождения константы будет создан символ.
В JSON версии 1.7.x, объекты с произвольными аттрибутами могут быть созданы при помощи документов JSON следующим образом:
{"json_class":"JSON::GenericObject","foo":"bar"}
Документ создаст инстанс JSON::GenericObject с аттрибутом "foo", которому выставлено значение "bar". Создание этих объектов повлечет произвольное создание символов и в некоторых случаях может быть использование для преодоления механизмов безопасности.
ВНИМАНИЕ: это поведение не изменится если использовать `JSON.load`. Вы никогда не должны давать на вход `JSON.load` ввод из неизвестных источников. Если вы работаете с JSON из неизвестных источников, всегда используйте `JSON.parse`.
Все пользователи, использующие затронутые релизы, должны обновиться или использовать один из обходных путей.
Обходные пути
Пользователям, которые не могут обновить ruby или гем JSON, следует заменить свой код с:
на:
Если вы не можете заменить использование `JSON.parse` (например, вы используете гем, который зависит от `JSON.parse`, как multi_json), то примените следующий манкипатч:
Затронутые версии
- Все версии ruby 1.9 до ruby 1.9.3 patchlevel 392
- Все версии ruby 2.0 до ruby 2.0.0 patchlevel 0
- транк до ревизии 39208
Благодарности
Огромное спасибо следующим людям, отвественным за обнаружение и работу с командой Rails по починке данной проблемы:
- Thomas Hollstegge of Zweitag (www.zweitag.de)
- Ben Murphy
История
- Оригинал опубликован 2013-02-22 12:00:00 (UTC)