Исправлено: до 0.1.6, libyaml уязвим для эксплойта переполнения кучи от вредоносных полезных данных YAML

Я получаю следующую ошибку при запуске rspec после того, как добавил жемчуг vcr. Простое выполнение gem install psych -- --enable-bundled-libyaml, как было предложено, не решает проблему. Я использую rbenv и ruby-build, и я на Ruby 2.1.1. Что мне нужно сделать, чтобы исправить это?

SafeYAML Warning
  ----------------

  You appear to have an outdated version of libyaml (0.1.4) installed on your system.

  Prior to 0.1.6, libyaml is vulnerable to a heap overflow exploit from malicious YAML payloads.

  For more info, see:
  https://www.ruby-lang.org/en/news/2014/03/29/heap-overflow-in-yaml-uri-escape-parsing-cve-2014-2525/

  The easiest thing to do right now is probably to update Psych to the latest version and enable
  the 'bundled-libyaml' option, which will install a vendored libyaml with the vulnerability patched:

  gem install psych -- --enable-bundled-libyaml

Ответы

Ответ 1

Во-первых, вам нужно обновить Ruby-build, они недавно исправили эту проблему безопасности. Теперь он устанавливает libyaml 0.1.6 для компиляции Ruby.

$ rm -rf ~/.rbenv/plugins/ruby-build
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

Перекомпилируйте, переустановите версию Ruby, которую вы используете, 2.0.0-p451 в моем случае:

$ rbenv install 2.0.0-p451
rbenv: /home/ubuntu/.rbenv/versions/2.0.0-p451 already exists
continue with installation? (y/N) y
Downloading yaml-0.1.6.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/5fe00cda18ca5daeb43762b80c38e06e
...

И это сработало в моем случае.

Ответ 2

Я просто выполнил инструкции в этом ответе fooobar.com/questions/34718/... и, похоже, сделал трюк. Я сделал это несколько иначе:

rvm pkg install libyaml
rvm get stable
rvm reinstall all --force

Это может не помочь, если вы используете системный Ruby и, очевидно, будете отличаться от rbenv.

Ответ 3

Как пользователь rvm, мне удалось настроить свою игру на игру, построив 0.1.6 выпуск libyaml, затем (повторная установка) Ruby, передав следующий флаг настройки

rvm install 1.9.3 -- --with-libyaml-dir=/usr/local

Надеюсь, это поможет людям в краткосрочной перспективе, пока пыль не успокоится.

Ответ 4

Если вы находитесь в Mac OS X/Mavericks, вы можете работать на установленном системой Ruby. Мышление поощряет вас не делать этого. У меня тоже была эта проблема, поэтому я последовал их советам и установил brew и rbenv, и проблема исчезла.