CVE-2014-8090: Weitere Denial-of-Service XML-Expansion

Unbeschränkte Entitätsexpansion kann zu einer DoS-Schwachstelle in REXML führen, ähnlich wie in “Entitätsexpansion-DoS-Schwachstelle in REXML (XML-Bombe, CVE-2013-1821)” und “CVE-2014-8080: Denial-of-Service XML-Expansion”. Dieser Sicherheitslücke wurde die CVE-Nummer CVE-2014-8090 zugewiesen. Wir empfehlen dringend, Ruby zu aktualisieren.

Details

Dies ist eine weitere Korrektur für CVE-2013-1821 und CVE-2014-8080. Die bisherigen Patches haben mehrere Probleme bei der rekursiven Expansion und die Gesamtgröße der erzeugten Strings korrigiert. Sie haben jedoch die bisherige Schranke für Entitätsexpansionen außer Acht gelassen. Rekursive Entitätsexpansion mit einem leeren String kann zu vollständiger Auslastung der CPU führen. Ferner kann der REXML-Parser dazu gebracht werden, extrem große String-Objekte zu allozieren, wenn er Textknoten aus einem XML-Dokument ausliest. Diese können den gesamten Speicher eines Rechners belegen, was zu einem Denial-of-Service führt.

Betroffener Code sieht etwa folgendermaßen aus:

require 'rexml/document'

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

p REXML::Document.new(xml)

Alle Nutzer, die eine betroffene Ruby-Version einsetzen, sollten diese entweder aktualisieren oder den Workaround anwenden.

Betroffene Versionen

  • Alle Versionen von Ruby 1.9 vor Ruby 1.9.3 patchlevel 551
  • Alle Versionen von Ruby 2.0 vor Ruby 2.0.0 patchlevel 598
  • Alle Versionen von Ruby 2.1 vor Ruby 2.1.5
  • Alle Trunk-Revisionen vor Revision 48402

Workaround

Wenn Sie Ihr Ruby nicht aktualisieren können, nutzen Sie diesen Monkeypatch als Workaround:

class REXML::Document
  def document
    self
  end
end

Danksagung

Dank an Tomas Hoger für das Melden des Problems.

Verlauf

  • Veröffentlicht am 2014-11-13 12:00:00 UTC