CVE-2014-8090: Kolejna odmowa usługi w XML

Nieograniczony rozrost encji może prowadzić do podatności na DoS w REXML, jak “Podatność na DoS w REXML przez rozrost encji (bomba XML, CVE-2013-1821)” i “CVE-2014-8080: Odmowa usługi w XML”. Tej podatności został przypisany identyfikator CVE-2014-8090. Zdecydowanie zalecamy aktualizację Rubiego.

Szczegóły

Jest to dodatkowa poprawka do CVE-2013-1821 i CVE-2014-8080. Poprzednie łatki naprawiały rekursywny rozrost w wielu miejscach oraz całkowity rozmiar tworzonych Stringów. Jednakże nie uwzględniały dawnego limitu używanego dla rozrostu encji. 100% zużycie CPU może nastąpić w wyniku rekursywnego rozrostu z pustym Stringiem. Podczas czytania węzłów tekstu z dokumentu XML, parser REXML może zostać zmuszony do alokowania bardzo dużych napisów, które mogą zająć całą dostępną pamięć maszyny, powodując odmowę usługi.

Kod może wyglądać następująco:

require 'rexml/document'

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

p REXML::Document.new(xml)

Wszyscy użytkownicy używający podatnej wersji powinni natychmiast zaktualizować ją lub użyć obejścia problemu.

Podatne wersje

  • Dla 1.9 wszystkie wcześniejsze wersje od 1.9.3 patchlevel 551
  • Dla 2.0 wszystkie wcześniejsze wersje od 2.0.0 patchlevel 598
  • Dla 2.1 wszystkie wcześniejsze wersje od 2.1.5
  • Wcześniej niż rewizja trunk 48402

Obejście

Jeśli nie możesz zaktualizować Rubiego, użyj tej łatki jako obejście problemu:

class REXML::Document
  def document
    self
  end
end

Podziękowania

Podziękowania dla Tomasa Hogera za zgłoszenie tego problemu.

Historia

  • Oryginalnie opublikowane 2014-11-13 12:00:00 UTC