CVE-2014-8090:另一个 XML 洪水攻击

不受限制的实体扩张可导致 REXML 的风险发生,像是这两篇文章所描述的漏洞:“Entity expansion DoS vulnerability in REXML (XML bomb, CVE-2013-1821)” 以及 “CVE-2014-8080: Denial of Service XML Expansion”

这个风险的 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 报告这个问题。

历史

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