CVE-2014-8090: REXML における XML 展開に伴う新たなサービス不能攻撃について

REXML において XML のパラメータエンティティの展開によりサービス不能攻撃が可能となる新たな脆弱性が報告されました。 この脆弱性は、既に修正済みの「REXML におけるエンティティ展開に伴うサービス不能攻撃について (CVE-2013-1821)」および「CVE-2014-8080: REXML におけるXML展開に伴うサービス不能攻撃について」と類似していますが、これらとは別に対応が必要となります。 この脆弱性は CVE-2014-8090 として CVE に登録されています。 ユーザーの皆さんには Ruby を更新することを強くお勧めします。

詳細

この脆弱性はCVE-2013-1821およびCVE-2014-8080と関連しています。 これらの脆弱性に対しては、再帰的エンティティ展開において、置換実行数および展開後文字列のサイズに制限を設けることによって対応しましたが、前者が正しく機能していませんでした。 そのため、空文字列を再帰的に展開させることにより、CPU リソースを 100% 消費させることが可能なままとなっています。 また、極めて大量の String オブジェクトをさせることにより、マシン上のメモリを使い果たさせてサービス不能攻撃 (DoS) を成立させることができます。

影響を受けるのは以下のようなコードです:

require 'rexml/document'

xml = <<XML
<!DOCTYPE root [
  # ENTITY expansion vector
]>
<cd></cd>
XML

p REXML::Document.new(xml)

影響を受けるバージョンの Ruby を使用している全てのユーザーは、速やかに Ruby を更新するか、以下の回避策を適用してください。

影響を受けるバージョン

  • Ruby 1.9.3 patchlevel 551 より前の全ての Ruby 1.9 系列
  • Ruby 2.0.0 patchlevel 598 より前の全ての Ruby 2.0 系列
  • Ruby 2.1.5 より前の全ての Ruby 2.1 系列
  • revision 48402 より前の開発版 (trunk)

回避策

もし Ruby を更新することができない場合、回避策として以下のモンキーパッチを適用してください:

class REXML::Document
  def document
    self
  end
end

クレジット

この脆弱性は Tomas Hoger によって報告されました。

更新履歴

  • 2014-11-13 21:00:00 JST 初版