RDoc で生成した HTML ドキュメントにおける XSS 脆弱性 (CVE-2013-0256)

ruby にバンドルされている RDoc が生成する HTML ドキュメントにおいて、クロスサイトスクリプティング攻撃を行うことができる脆弱性 (XSS 脆弱性) が報告されました。 全ての ruby ユーザーは、この問題に対するセキュリティフィックスが含まれた RDoc をバンドルするバージョンに更新することが推奨されます。 また、現在、RDoc が生成した HTML ドキュメントを公開している場合は、以下に示すパッチを適用するか、またはセキュリティフィックスを含む RDoc を利用して HTML ドキュメントを再生成する必要があります。

影響

RDoc 2.3.0 から 3.12.0、および、4.0.0.preview2.1 以前のプレリリース版を利用して生成された HTML ドキュメントには、XSS 脆弱性が存在します。 これを悪用することにより、第三者に Cookie を露見させることができます。

詳細

この脆弱性は、RDoc と共にインストールされる darkfish.js というファイル内に存在し、HTML ドキュメント生成時にコピーされます。

RDoc は静的ドキュメント生成ツールです。 したがって、RDoc 自体を修正しても、既に生成済みの HTML ドキュメントの脆弱性は解消されません。 これらの HTML ドキュメントを公開している場合は、その HTML ドキュメント自体にも修正パッチを適用する必要があります。

解決策

公開している HTML ドキュメントに対しては、以下のパッチを適用して下さい。 パッチ時にホワイトスペースを無視させることにより、脆弱性のある全てのファイルにこのパッチが適用可能です。

diff --git darkfish.js darkfish.js
index 4be722f..f26fd45 100644
--- darkfish.js
+++ darkfish.js
@@ -109,13 +109,15 @@ function hookSearch() {
 function highlightTarget( anchor ) {
   console.debug( "Highlighting target '%s'.", anchor );

-  $("a[name=" + anchor + "]").each( function() {
-    if ( !$(this).parent().parent().hasClass('target-section') ) {
-      console.debug( "Wrapping the target-section" );
-      $('div.method-detail').unwrap( 'div.target-section' );
-      $(this).parent().wrap( '<div class="target-section"></div>' );
-    } else {
-      console.debug( "Already wrapped." );
+  $("a[name]").each( function() {
+    if ( $(this).attr("name") == anchor ) {
+      if ( !$(this).parent().parent().hasClass('target-section') ) {
+        console.debug( "Wrapping the target-section" );
+        $('div.method-detail').unwrap( 'div.target-section' );
+        $(this).parent().wrap( '<div class="target-section"></div>' );
+      } else {
+        console.debug( "Already wrapped." );
+      }
     }
   });
 };

また、今後生成する HTML ドキュメントに今回の脆弱性が含まれてしまうことを避けるため、ruby 1.9 を使用している場合、ruby-1.9.3 patchlevel 385 へ更新してください。 ruby 2.0.0 rc1 以前、または trunk を使用している場合、ruby 2.0.0 rc2 または revision 39102 以降へ更新してください。 なお、rubygems を利用し、RDoc 3.12.1 あるいは RDoc 4.0.0.rc.2 へ更新することもできます。

影響のあるバージョン

  • ruby 1.9.3 patchlevel 383 より前の全ての ruby 1.9 系列
  • ruby 2.0.0 revision 39102 より前の全ての ruby 2.0 系列 (2.0.0 rc1 を含む)

クレジット

この脆弱性は Evgeny Ermakov <corwmh@gmail.com> によって報告されました。 この脆弱性は CVE-2013-0256 として登録されています。

更新履歴

  • 2013-02-06 22:30:00 (JST) 初版