CVE-2014-8080: XML 扩展拒绝服务漏洞
由 zzak 发布于 2014 年 10 月 27 日
不受限制的实体扩展可能导致 REXML 中的拒绝服务漏洞。此漏洞已分配 CVE 标识符 CVE-2014-8080。我们强烈建议升级 Ruby。
详情
在读取 XML 文档的文本节点时,REXML 解析器可能被诱导分配极其巨大的字符串对象,从而消耗机器上的所有内存,导致拒绝服务。
受影响的代码看起来是这样的
require 'rexml/document'
xml = <<XML
<!DOCTYPE root [
# ENTITY expansion vector
]>
<cd></cd>
XML
p REXML::Document.new(xml)所有运行受影响版本的用户都应立即升级或使用以下任一解决方法。
受影响的版本
- 所有 Ruby 1.9 版本,在 Ruby 1.9.3 patchlevel 550 之前
- 所有 Ruby 2.0 版本,在 Ruby 2.0.0 patchlevel 594 之前
- 所有 Ruby 2.1 版本,在 Ruby 2.1.4 之前
- 在 trunk revision 48161 之前
变通方法
如果您无法升级 Ruby,请在 Ruby 2.1.0+ 版本上使用此 monkey patch 作为临时解决方案。
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
end对于低于 2.1.0 的 Ruby 版本,您可以使用以下 monkey patch。
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 12:00:00 (UTC)
近期新闻
Ruby 4.0.0 发布
我们很高兴地宣布 Ruby 4.0.0 的发布。Ruby 4.0 引入了“Ruby Box”和“ZJIT”,并增加了许多改进。
由 naruse 发布于 2025 年 12 月 25 日
Ruby 文档的全新外观
继 ruby-lang.org 重新设计之后,我们还有更多好消息来庆祝 Ruby 成立 30 周年:docs.ruby-lang.org 采用了 Aliki——RDoc 的新默认主题,焕然一新。
由 Stan Lo 发布于 2025 年 12 月 23 日
重新设计我们的网站标识
我们很高兴地宣布对我们的网站进行全面重新设计。此次更新的设计由 Akatsuka Taeko 创作。
由 Hiroshi SHIBATA 发布于 2025 年 12 月 22 日
Ruby 4.0.0 preview3 发布
我们很高兴地宣布 Ruby 4.0.0-preview3 的发布。Ruby 4.0 引入了 Ruby::Box 和“ZJIT”,并增加了许多改进。
由 naruse 发布于 2025 年 12 月 18 日