修复方法:在0.1.6之前的版本中,libyaml容易受到来自恶意YAML负载的堆溢出攻击。

14
在添加了vcr gem后运行rspec时,我遇到了以下错误。仅仅运行建议的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

在2.0.0p353这里遇到了完全相同的问题。 - squarefrog
5个回答

9

首先,您需要更新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
...

在我的情况下它起作用了。


4

我刚刚按照这个回复中的指示进行了操作 https://dev59.com/Kmox5IYBdhLWcg3wGwpo#9510209 ,似乎已经解决了问题。不过,我稍微有些不同:

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

如果您正在使用系统自带的Ruby,则这可能无法帮助您,而且在使用rbenv时也会有所不同。


1
由于某种原因,在osx(10.9.2)上,rvm pkg install libyaml安装的是0.1.5版本,所以这对我没有任何作用。 - TKH
@TKH请看看这个答案是否有帮助:https://dev59.com/-n7aa4cB1Zd3GeqPqndx - ouranos
@ouranos 看起来 brew 已经安装了 0.1.6 版本。尝试重新安装但无济于事。:( - TKH
我的安装失败了,出现了404错误,无法获取https://rvm.io/src/yaml-0.1.4.tar.gz的yaml-0.1.4.tar.gz文件。 - Sarah Vessels

3
作为rvm的用户,我通过构建0.1.6版本的libyaml(可在此处下载),然后重新安装Ruby,并传递以下配置标志,使我的设置能够正常运行:

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

希望这能帮助人们在短期内解决问题,直到问题得到解决。


在所有关于这个问题的链接帖子中,建议中的这一个起作用了!在此之后,我不得不重新安装导致问题的 gem,但是然后它就可以工作了!没有使用 rvm 安装重新安装 gem 并没有解决这个问题。 - ATSiem

0

0

如果你使用的是Mac OS X / Mavericks,那么你可能正在运行系统安装的Ruby。Thoughbot鼓励你不要这样做。我也遇到了这个问题,所以我按照他们的建议安装了brewrbenv,问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接