CVE-2014-8080: REXML におけるXML展開に伴うサービス不能攻撃について
Posted by nagachika on 27 Oct 2014
REXML において XML のパラメータエンティティの展開によりサービス不能攻撃が可能となる脆弱性が報告されました。 この脆弱性は CVE-2014-8080 として CVE に登録されています。 ユーザーの皆さんには Ruby を更新することを強くお勧めします。
詳細
XMLドキュメントからテキストのノードを読み込む際にREXMLパーサーに極めて大きな 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 550 より前の全ての Ruby 1.9 系列
- Ruby 2.0.0 patchlevel 594 より前の全ての Ruby 2.0 系列
- Ruby 2.1.4 より前の全ての Ruby 2.1 系列
- revision 48616 より前の開発版 (trunk)
回避策
もし Ruby を更新することができない場合、2.1系列では回避策として以下のモンキーパッチを適用してください:
class REXML::Entity
def value
if @value
matches = @value.scan(PEREFERENCE_RE)
rv = @value.clone
if @parent
sum = 0
matches.each do |entity_reference|
entity_value = @parent.entity( entity_reference[0] )
if sum + entity_value.bytesize > Security.entity_expansion_text_limit
raise "entity expansion has grown too large"
else
sum += entity_value.bytesize
end
rv.gsub!( /%#{entity_reference.join};/um, entity_value )
end
end
return rv
end
nil
end
endRuby 2.1.0 よりも古い系列の Ruby では、以下のモンキーパッチを適用してください:
class REXML::Entity
def value
if @value
matches = @value.scan(PEREFERENCE_RE)
rv = @value.clone
if @parent
sum = 0
matches.each do |entity_reference|
entity_value = @parent.entity( entity_reference[0] )
if sum + entity_value.bytesize > Document.entity_expansion_text_limit
raise "entity expansion has grown too large"
else
sum += entity_value.bytesize
end
rv.gsub!( /%#{entity_reference.join};/um, entity_value )
end
end
return rv
end
nil
end
endクレジット
この脆弱性は Willis Vandevanter によって報告されました。
更新履歴
- 2014-10-27 21:00:00 (JST) 初版
最近のニュース
Ruby 3.4.11 リリース
Ruby 3.4.11 がリリースされました。 このリリースは安定版パッケージの定期的リリースで、いくつかの不具合修正が行なわれています。
Posted by nagachika on 23 Sep 2026
Ruby 3.3.12 リリース
Ruby 3.3.12 がリリースされました。
Posted by hsbt on 16 Jul 2026
Ruby 3.4.10 リリース
Ruby 3.4.10 がリリースされました。
Posted by nagachika on 30 Jun 2026
Ruby 4.0.2 リリース
Ruby 4.0.2 がリリースされました。
Posted by k0kubun on 16 Mar 2026