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 4.0.0 リリース
Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。
Posted by naruse on 25 Dec 2025
サイトのアイデンティティの再設計
サイトの包括的なデザインのアップデートを発表できることを嬉しく思います。今回の更新ではTaeko Akatsukaさんにデザインを担当していただきました。
Posted by Hiroshi SHIBATA on 22 Dec 2025
Ruby 4.0.0 preview3 リリース
Ruby 4.0.0-preview3 が公開されました。
Posted by naruse on 18 Dec 2025
Ruby 4.0.0 preview2 リリース
Ruby 4.0.0-preview2 が公開されました。Ruby 4.0では、Unicodeバージョンの17.0.0へのアップデートなど様々な改善が行われています。
Posted by naruse on 17 Nov 2025