Ruby の YAML データにおける URI エスケープ処理にオーバーフロー問題があります。
この脆弱性は CVE 識別番号
[CVE-2014-2525](http://www.ocert.org/advisories/ocert-2014-003.html)
に割り当てられています。

## 詳細

タグ付き YAML の中で文字列がパースされる際に、特殊な文字列がヒープオーバーフローを引き起こし、任意のコードが実行される可能性があります。

例:

<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="no">YAML</span><span class="p">.</span><span class="nf">load</span> <span class="o">&lt;</span><span class="n">code_from_unknown_source</span><span class="o">&gt;</span></code></pre></figure>

## 影響を受けるバージョン

Ruby 1.9.3-p0 以上にはデフォルトの YAML パーサとして psych が含まれています。
0.1.5 以下のバージョンの libyaml にリンクされているすべてのバージョンの psych が影響を受けます。

また、以下の Ruby にはこの問題のあるバージョンの libyaml が同梱されています。

* Ruby 2.0.0-p451 以前の Ruby 2.0.0
* Ruby 2.1.1 以前の Ruby 2.1

以下の方法で実行時に使用される libyaml のバージョンを確認できます:

<figure class="highlight"><pre><code class="language-sh" data-lang="sh"><span class="nv">$ </span>ruby <span class="nt">-rpsych</span> <span class="nt">-e</span> <span class="s1">'p Psych.libyaml_version'</span>
<span class="o">[</span>0, 1, 5]</code></pre></figure>

## 解決方法

libyaml をシステムにインストールしているユーザは libyaml を `0.1.6` にアップデートすることが推奨されます。
Ruby を再コンパイルする際にアップデートした新しい libyaml を指定してください:

<figure class="highlight"><pre><code class="language-sh" data-lang="sh"><span class="nv">$ </span>./configure <span class="nt">--with-yaml-dir</span><span class="o">=</span>/path/to/libyaml</code></pre></figure>

システムに libyaml がインストールされていないユーザは、Ruby 同梱の libyaml を使用しているので、 libyaml `0.1.6` を提供している psych `2.0.5` にアップデートすることが推奨されます:

<figure class="highlight"><pre><code class="language-sh" data-lang="sh"><span class="nv">$ </span>gem <span class="nb">install </span>psych</code></pre></figure>

また、Ruby を 2.0.0-p481、Ruby 2.1.2 またはより新しいバージョンにアップデートすることでも、同梱の libyaml が更新されます。


## 更新履歴

* 2014-03-29 10:49:25(JST) 初版
* 2014-03-29 18:45:00(JST) 2版
* 2014-05-09 12:00:00(JST) 3版
