--pgp-sign-Multipart_Sat_Aug_23_17:07:29_2008-1
Content-Type: text/plain; charset=ISO-2022-JP

前田です。

REXMLにDoS脆弱性が発見されましたのでお知らせします。
この報告は以下のURLでも参照可能です。

* <URL:http://www.ruby-lang.org/ja/news/2008/08/23/dos-vulnerability-in-rexml/>

= REXMLのDoS脆弱性

RailsでXMLリクエストのパースに使用されているREXMLに、DoS脆弱性が発見さ
れました。XML entity explosion attackと呼ばれる攻撃手法により、ユーザか
ら与えられたXMLを解析するようなアプリケーションをサービス不能(DoS)状態
にすることができます。大部分のRailsアプリケーションはこの攻撃に対して脆
弱です。

== 影響

攻撃者は、以下のように再帰的にネストした実体参照を含むXML文書をREXMLに
解析させることにより、サービス不能(DoS)状態を引き起こすことができます。

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE member [
    <!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
    <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
    <!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
    <!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
    <!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
    <!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
    <!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
  ]>
  <member>
  &a;
  </member>

== 脆弱性の存在するバージョン

=== 1.8系

  * 1.8.6-p287以前のすべてのバージョン
  * 1.8.7-p72以前のすべてのバージョン

=== 1.9系

  * すべてのバージョン

== 対処方法

問題を修正するためのモンキーパッチ(実行時にライブラリを修正するパッチ)をダウンロードしてください。

* ((<URL:http://www.ruby-lang.org/security/20080823rexml/rexml-expansion-fix.rb>))

REXMLを使用する前にrexml-expansion-fix.rbをロードするように、あなたのアプリケーションを修正してください。

  require "rexml-expansion-fix"
  ...
  doc = REXML::Document.new(str)
  ...

Railsアプリケーションを利用している場合、rexml-expansion-fix.rbをロード
パス上のディレクトリ(たとえばRAILS_ROOT/lib/)にコピーし、次のような行を
config/environment.rbに追加してください。

  require "rexml-expansion-fix"

Rails 2.1以降の場合、rexml-expansion-fix.rbを
RAILS_ROOT/config/initializersにコピーするだけで自動的にロードされます。

デフォルトでは、XML実体参照の展開は10000回に制限されます。
この値は、REXML::Document.entity_expansion_limit=により変更可能です。

  REXML::Document.entity_expansion_limit = 1000

この修正はgemパッケージとして提供され、Railsの将来のバージョンで利用さ
れるようになる予定ですが、ただちに対策されることを推奨します。

== クレジット

この脆弱性はACROS SecurityのLuka Treiber氏とMitja Kolsek氏により
Ruby Security Teamに報告されました。

脆弱性を修正するためのモンキーパッチはRails Core TeamのMichael
Koziarski氏により作成されました。

--pgp-sign-Multipart_Sat_Aug_23_17:07:29_2008-1
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQBIr8VDZ3GizHGDKdwRAmTXAKCOL7DJWZBYumV1eRuFkn75LYQykACgsBqy
d32aiY7o2PwuWnUQjcxTmkQ=
=Zi+h
-----END PGP SIGNATURE-----

--pgp-sign-Multipart_Sat_Aug_23_17:07:29_2008-1--