Обновление Ruby on Rails 3.0.20 и 2.3.16 с устранением критической уязвимости
29 января 2013 года
Спустя всего две недели с момента прошлой опасной уязвимости представлено корректирующее обновление 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 рекомендуется незамедлительно установить обновление, так как в сети уже опубликован (Архивная копия от 3 февраля 2013 на Wayback Machine) рабочий прототип эксплоита. Проблема проявляется в ветках 2.3.x и 3.0.x. В качестве обходного пути защиты можно переключиться на бэкенд JSONGem, указав настройках инициализации приложения ActiveSupport::JSON.backend = "JSONGem".
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.