Posted by Shugo Maeda on 23 Aug 2008
Rubyの標準ライブラリに含まれているREXMLに、DoS脆弱性が発見されました。 XML entity explosion attackと呼ばれる攻撃手法により、ユーザから与えられ たXMLを解析するようなアプリケーションをサービス不能(DoS)状態にすること ができます。
Railsはデフォルトの状態でユーザから与えられたXMLを解析するため、大部分の Railsアプリケーションはこの攻撃に対して脆弱です。
影響
攻撃者は、以下のように再帰的にネストした実体参照を含むXML文書をREXMLに 解析させることにより、サービス不能(DoS)状態を引き起こすことができます。
脆弱性の存在するバージョン
1.8系
- 1.8.6-p287以前のすべてのバージョン
- 1.8.7-p72以前のすべてのバージョン
1.9系
- すべてのバージョン
対処方法
問題を修正するためのモンキーパッチ(実行時にライブラリを修正するパッチ)をダウンロードしてください。
REXMLを使用する前にrexml-expansion-fix2.rbをロードするように、あなたのアプリケーションを修正してください。
Railsアプリケーションを利用している場合、rexml-expansion-fix2.rbをロード パス上のディレクトリ(たとえばRAILS_ROOT/lib/)にコピーし、次のような行を config/environment.rbに追加してください。
Rails 2.1以降の場合、rexml-expansion-fix2.rbを RAILS_ROOT/config/initializersにコピーするだけで自動的にロードされます。
デフォルトでは、XML実体参照の展開は10000回に制限されます。 この値は、REXML::Document.entity_expansion_limit=により変更可能です。
この修正はgemパッケージとして提供され、Railsの将来のバージョンで利用さ れるようになる予定ですが、ただちに対策されることを推奨します。
クレジット
この脆弱性はACROS SecurityのLuka Treiber氏とMitja Kolsek氏により Ruby Security Teamに報告されました。
脆弱性を修正するためのモンキーパッチはRails Core TeamのMichael Koziarski氏により作成されました。
変更履歴
- 2008-08-29 18:53 +09:00 Rails固有の問題との誤解を与えないように概要を修正しました。
- 2008-11-09 12:40 +09:00 モンキーパッチのバグを修正しました。