CVE-2014-8080: Denial of Service XML Expansion
Gepostet von zzak am 27. Okt 2014
Unbeschränkte Entitätsexpansion kann zu einer DoS-Schwachstelle in REXML führen. Diese Schwachstelle wurde unter der CVE-Nummer CVE-2014-8080 registriert. Wir empfehlen dringend, Ruby zu aktualisieren.
Details
Beim Lesen von Textknoten aus einem XML-Dokument kann der REXML-Parser dazu gebracht werden, extrem große String-Objekte zuzuweisen, die den gesamten Speicher einer Maschine aufbrauchen und so einen Denial-of-Service verursachen können.
Betroffener Code sieht ungefähr so aus:
require 'rexml/document'
xml = <<XML
<!DOCTYPE root [
# ENTITY expansion vector
]>
<cd></cd>
XML
p REXML::Document.new(xml)Alle Benutzer, die eine betroffene Version ausführen, sollten entweder ein Upgrade durchführen oder umgehend eine der Problemumgehungen verwenden.
Betroffene Versionen
- Alle Ruby 1.9-Versionen vor Ruby 1.9.3 patchlevel 550
- Alle Ruby 2.0-Versionen vor Ruby 2.0.0 patchlevel 594
- Alle Ruby 2.1-Versionen vor Ruby 2.1.4
- vor Trunk-Revision 48161
Problemumgehungen
Wenn Sie Ruby nicht aktualisieren können, verwenden Sie diesen Monkey-Patch als Workaround für Versionen von 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 älter als 2.1.0 können Sie den folgenden Monkey-Patch 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
endCredits
Vielen Dank an Willis Vandevanter für die Meldung dieses Problems.
Verlauf
- Ursprünglich veröffentlicht am 2014-10-27 12:00:00 (UTC)
Aktuelle Nachrichten
Ruby 4.0.0 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 4.0.0 bekannt zu geben. Ruby 4.0 führt „Ruby Box“ und „ZJIT“ ein und bringt viele Verbesserungen mit sich.
Veröffentlicht von naruse am 25. Dez 2025
Ein neuer Look für Rubys Dokumentation
Nach dem Redesign von ruby-lang.org gibt es weitere Neuigkeiten zur Feier des 30-jährigen Jubiläums von Ruby: docs.ruby-lang.org hat ein komplett neues Erscheinungsbild mit Aliki – dem neuen Standard-Theme von RDoc.
Veröffentlicht von Stan Lo am 23. Dez 2025
Neues Website-Erscheinungsbild
Wir freuen uns, ein umfassendes Redesign unserer Website bekannt zu geben. Das Design für dieses Update wurde von Taeko Akatsuka erstellt.
Veröffentlicht von Hiroshi SHIBATA am 22. Dez 2025
Ruby 4.0.0 preview3 veröffentlicht
Wir freuen uns, die Veröffentlichung von Ruby 4.0.0-preview3 bekannt zu geben. Ruby 4.0 führt Ruby::Box und „ZJIT“ ein und bringt viele Verbesserungen mit sich.
Veröffentlicht von naruse am 18. Dez 2025