Пользователь
0,0
рейтинг
23 ноября 2013 в 09:19

Разработка → Отказ в обслуживании и потенциальное выполнение произвольного кода в большинстве версиях 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 она не затрагивает.
@damwihu
карма
2,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (7)

  • –1
    Эх, рубинус. из-за твоего 1.8.7 мне придется с тобой расстаться.
    • 0
      Он уже примерно месяц держит 2.0 и 2.1
    • 0
      Не торопитесь, как заявляют разработчики Heroku — Rubinius и JRuby уязвимости не подвержены.
  • +4
  • +2
    Забавно, как разные языки программирования наступают на одни и те же грабли. Году в 2011 была шумиха из-за такой же проблемы в JVM. Шуму было действительно много: мало того, что новость несколько дней висела в топе ХаккерНьюс, так про нее написали всякие издания вроде ZDNet, The Register, InfoWorld и т.п. И если б я был одним из коммитеров Ruby, Python или другого языка программирования, я бы проверил, а не подвержен ли мой рантайм этой проблеме.

    Но по всей видимости, проблема не супер острая. В багтреккере JVM багрепорт висел несколько лет, и никто не чесался его фиксить. Видимо, подобрать правильный эксплойт, чтобы получить от дыры какой-то толк, довольно сложно.

    В любом случае, обновиться надо.
    • 0
      > подобрать правильный эксплойт, чтобы получить от дыры какой-то толк, довольно сложно.

      Иногда достаточно просто уронить, особенно если это какой-нибудь популярный сервис который всем нужен.
  • +2
    POC:
    ("1."+"1"*3000000).to_f
    

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.