CVE-2014-8090:另一個 XML 阻斷攻擊

不受限制的實體擴張可導致 REXML 的風險發生,像是這兩篇文章所描述的漏洞:“Entity expansion DoS vulnerability in REXML (XML bomb, CVE-2013-1821)”以及“CVE-2014-8080:XML 擴張的阻斷攻擊”

這個風險的 CVE 識別號已經被指派為 CVE-2014-8090。強烈建議您儘速升級 Ruby。

細節

這是 CVE-2013-1821CVE-2014-8080 的額外修正。先前的補丁修正了幾處的遞迴擴展並限制了字串建立的總長度。但沒有針對實體所進行限制。空字串的遞迴擴張可能把 CPU 整個吃滿。在從 XML 文件讀取文字節點時,REXML 解析器可以轉成佔用極大空間的字串物件,將機器上的記憶體用盡,進而導致阻斷攻擊。

受影響的程式碼看起來像是:

require 'rexml/document'

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

p REXML::Document.new(xml)

所有運行受影響版本的使用者應該儘速升級或採用下面的因應措施。

受影響版本

  • 所有 Ruby 1.9 patchlevel 在 551 以前的版本
  • 所有 Ruby 2.0 patchlevel 在 598 以前的版本
  • 所有 Ruby 2.1 在 2.1.5 以前的版本
  • 主幹 revision 48402 以前的版本

因應措施

若無法升級 Ruby,請使用以下的替代方案:

class REXML::Document
  def document
    self
  end
end

致謝

感謝 Tomas Hoger 回報這個問題。

History

  • 2014-11-13 12:00:00 UTC 初版