Приветствую уважаемое 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 рекомендуется обновиться на более свежие версии.
Автор: damwihu