Pull to refresh

Отказ в обслуживании и потенциальное выполнение произвольного кода в большинстве версиях Ruby

Ruby *
Приветствую уважаемое Ruby сообщество.

Странно, что этой новости еще нет на Хабре, но вчера рано утром разработчики Ruby сообщили о найденном переполнении кучи при парсинге значений с плавающей точкой. Данной уязвимости был присвоен код CVE-2013-4164. Также ребята предупреждают что эта ошибка может вызвать как минимум отказ в обслуживании, но с определенной долей вероятности в Ruby приложения можно внедрить произвольный код.

Список уязвимых версий:
  • Все версии ruby 1.8
  • Все версии ruby 1.9 вплоть до 1.9.3 patchlevel 484
  • Все версии ruby 2.0 вплоть до 2.0.0 patchlevel 353
  • Все версии ruby 2.1 вплоть до 2.1.0 preview2
  • Все версии в trunk до ревизии 43780


Детали уязвимости


Детали в официальном посте достаточно скудны. Там написано, что при конвертации строки в значение с плавающей точкой, специально сформированная строка может вызвать переполнение кучи, что в свою очередь может привести к отказу в обслуживании и возможному выполнению произвольного кода. Уязвимыми являются все программы, которые используют данную конвертацию. Самый частый пример — принятие и парсинг JSON из третьих источников.

Уязвимый код может выглядеть следующим образом:
untrusted_data.to_f


Однако, уязвим любой код, который создает значения с плавающей точкой из внешних источников, например:
JSON.parse untrusted_data


Решение


Разработчики рекомендуют обновление до ruby 1.9.3 patchlevel 484, ruby 2.0.0 patchlevel 353 либо ruby 2.1.0 preview2. Версия 1.8 является устаревшей и исправление уязвимости не планируется. Пользователям ruby 1.8 рекомендуется обновиться на более свежие версии.

UPD: Уязвимости подвержен только Ruby MRI. Rubinius и JRuby она не затрагивает.
Tags:
Hubs:
Total votes 15: ↑14 and ↓1 +13
Views 5.9K
Comments Comments 7