XMLエンティティは、REXMLにおける新しいDoS脆弱性(リンク)の原因である。再帰的にネストされたエンティティを定義し、使用するドキュメントは、こうしたエンティティの過剰な拡張を招き、最終的にはアプリケーションを停止させる。
特にRailsは、その問題に対して弱い。着信XML要求の解析にREXMLを使用するからである。これはデフォルトで発生し、要求のドキュメントタイプ に依存しているので、ユーザによって提供されたXMLを自動的に処理する機能を使用不可にしない限りは、この脆弱性はすべてのRailsアプリケーション にとって危機となる。
今の段階では、1.8.6-p287、1.8.7-p72までのすべてのRubyバージョンおよびすべてのRuby 1.9.xで問題となる。提供されたサンプルXMLドキュメントの解析など、現在のJRuby 1.1.xのリリースでの試行もまた、結局OutOfMemoryError
になる。(注:エンティティが拡張する場合にのみ、問題が発生する。つまり単に解析をするだけでは、問題にならない。エンティティを含んでいるテキストノードは、発生する問題でアクセスする必要がある)。
REXMLの修正が利用可能になるまでは、修正はmonkey patchとしてREXMLのドキュメントおよびエンティティクラスへ提供される。パッチは基本的に、拡張済みのエンティティ数を制限し(限度は構成可能)、その限界を越えると例外を投げる。
この脆弱性のセキュリティ勧告ページには、さまざまなバージョンのRailsを確実にロードするためには、どこにパッチを置くべきかを示した解説が記載されている(リンク)。
原文はこちらです:http://www.infoq.com/news/2008/08/rexml-entity-explosion-dos-fix