Спустя всего две недели с момента прошлой опасной уязвимости представлено корректирующее обновление Ruby on Rails 3.0.20 и 2.3.16 с устранением очередной критической уязвимости (CVE-2013-0333), которая может привести к выполнению кода на сервере, обходу системы аутентификации и выполнению SQL-запроса. Проблема найдена в коде парсера JSON и может быть эксплуатирована при обработке специально сформированного JSON-блока c YAML-вставками. Для эксплуатации достаточно отправить любому приложению специальный HTTP POST-запрос с типом "text/json".
Интересно, что уязвимость имеет единые корни с прошлой критической проблемой, для которой был устранён лишь частный случай проявления уязвимости. Оказалось, что кроме XML блоков YAML-вставки аналогичным образом могут быть обработаны и в JSON-контенте. ActiveSupport::JSON по умолчанию используется бэкенд Yaml, который выполняет разбор через трансляцию JSON в YAML и выполнение YAML.load. При разборе строк используется метод StringScanner, заменяющий элементы JSON на эквивалентные блоки YAML, но не выполняющий полный парсинг и проверку конструкций JSON, что позволяет сформировать произвольные блоки YAML, в том числе передать и выполнить объекты с Ruby-кодом.
Всем пользователям Ruby on Rails рекомендуется незамедлительно установить обновление, так как в сети уже опубликован рабочий прототип эксплоита. Проблема проявляется в ветках 2.3.x и 3.0.x. В качестве обходного пути защиты можно переключиться на бэкенд JSONGem, указав настройках инициализации приложения ActiveSupport::JSON.backend = "JSONGem".
|