YAML URI转义解析中的堆溢出 (CVE-2014-2525)

Ruby 中 YAML 的 URI 转义解析存在溢出。此漏洞已被分配 CVE 标识符 CVE-2014-2525

详情

任何时候解析带有标签的 YAML 字符串时,一个精心构造的字符串都可能导致堆溢出,从而导致任意代码执行。

例如

YAML.load <code_from_unknown_source>

受影响的版本

Ruby 1.9.3-p0 及以上版本包含 psych 作为默认 YAML 解析器。任何链接到 libyaml <= 0.1.5 的 psych 版本都受到影响。

并且,以下版本的 Ruby 捆绑了受影响的 libyaml 版本

  • Ruby 2.0.0-p451 及更早版本,
  • Ruby 2.1.0 和 Ruby 2.1.1。

您可以通过运行以下命令来验证所使用的 libyaml 版本

$ ruby -rpsych -e 'p Psych.libyaml_version'
[0, 1, 5]

解决方案

建议将 libyaml 安装到系统中的用户将 libyaml 更新到 0.1.6。重新编译 Ruby 时,请指向新更新的 libyaml

$ ./configure --with-yaml-dir=/path/to/libyaml

没有系统 libyaml 的用户依赖于嵌入的 libyaml,建议将 psych 更新到 2.0.5,其中供应商提供了 libyaml 0.1.6

$ gem install psych

或者,将您的 Ruby 更新到 2.0.0-p481、2.1.2 或更高版本。

历史

  • 最初发布于 2014-03-29 01:49:25 UTC
  • 更新发布于 2014-03-29 09:37:00 UTC
  • 更新发布于 2014-05-09 03:00:00 UTC