CVE-2014-8080: Denial-of-Service XML-Expansion
Geschrieben von zzak am 27.10.2014
Übersetzt von Quintus
Unkontrollierte Entitätsexpansion in REXML kann zu einer DoS-Schwachstelle führen. Dieser Sicherheitslücke wurde die CVE-Nummer CVE-2014-8080 zugewiesen. Wir raten Ihnen nachdrücklich, Ihr Ruby zu aktualisieren.
Details
Der REXML-Parser kann, wenn er Textknoten aus einem XML-Dokument ausliest, dazu gebracht werden, extrem große String-Objekte zu allozieren, welche den gesamten Speicher eines Rechners verbrauchen können, was in der Folge zu einem Denial of Service führt.
Betroffener Code sieht etwa so aus:
require 'rexml/document'
xml = <<XML
<!DOCTYPE root [
# ENTITY expansion vector
]>
<cd></cd>
XML
p REXML::Document.new(xml)Alle Nutzer, die eine betroffene Version verwenden, sollten umgehend aktualisieren oder einen der Workarounds anwenden.
Betroffene Versionen
- Alle 1.9er Ruby-Versionen vor Ruby 1.9.3 patchlevel 550
- Alle 2.0er Ruby-Versionen vor Ruby 2.0.0 patchlevel 594
- Alle 2.1er Ruby-Versionen vor Ruby 2.1.4
- Trunk vor Revision 48161
Workarounds
Wenn Sie Ihr Ruby nicht aktualisieren können, nutzen Sie diesen Monkeypatch als Workaround für Ruby 2.1.0+:
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
endFür Ruby-Versionen, die älter sind als 2.1.0, können Sie den folgenden Monkeypatch verwenden:
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
endDanksagung
Dank geht an Willis Vandevanter für die Meldung des Problems.
Geschichte
- Erstmals veröffentlicht am 27.10.2014 12:00:00 (UTC)
Aktuelle Neuigkeiten
Ruby 3.4.2 veröffentlicht
Ruby 3.4.2 wurde veröffentlicht.
Geschrieben von k0kubun am 14.2.2025
Ruby 3.2.7 veröffentlicht
Ruby 3.2.7 wurde veröffentlicht.
Geschrieben von nagachika am 4.2.2025
Ruby 3.3.7 veröffentlicht
Ruby 3.3.7 wurde veröffentlicht.
Geschrieben von k0kubun am 15.1.2025
Ruby 3.4.0 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 3.4.0 bekannt zu geben. Ruby 3.4 führt den it-Blockparameter ein, ändert Prism zum Standardparser, bietet Happy Eyeballs Version...
Geschrieben von naruse am 25.12.2024