DoS-Schwachstelle in REXML

Gepostet von Shugo Maeda am 23. Aug 2008

Es gibt eine DoS-Schwachstelle in der REXML-Bibliothek, die in der Ruby-Standardbibliothek enthalten ist. Eine sogenannte "XML-Explosionsattacke" kann verwendet werden, um jede Anwendung, die benutzerdefinierte XML mit REXML parst, aus der Ferne zum Absturz zu bringen (zu deaktivieren).

Die meisten Rails-Anwendungen werden anfällig sein, da Rails standardmäßig benutzereingeführte XML mit REXML parst.

Auswirkungen

Ein Angreifer kann einen Denial-of-Service verursachen, indem er REXML veranlasst, ein Dokument mit rekursiv verschachtelten Entitäten zu parsen, wie zum Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE member [
  <!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
  <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
  <!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
  <!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
  <!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
  <!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
  <!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
]>
<member>
&a;
</member>

Betroffene Versionen

1.8 Serie

  • 1.8.6-p287 und alle vorherigen Versionen
  • 1.8.7-p72 und alle vorherigen Versionen

1.9 Serie

  • alle Versionen

Lösung

Bitte laden Sie den folgenden Monkey Patch herunter, um dieses Problem zu beheben.

Fixieren Sie dann Ihre Anwendung, um rexml-expansion-fix2.rb zu laden, bevor Sie REXML verwenden.

require "rexml-expansion-fix2"
...
doc = REXML::Document.new(str)
...

Wenn Sie eine Rails-Anwendung haben, kopieren Sie rexml-expansion-fix2.rb in ein Verzeichnis im Load Path (wie z.B. RAILS_ROOT/lib/) und fügen Sie die folgende Zeile in config/environment.rb ein.

require "rexml-expansion-fix2"

Wenn Ihre Anwendung Rails 2.1 oder neuer ist, können Sie rexml-expansion-fix2.rb einfach nach RAILS_ROOT/config/initializers kopieren und es wird automatisch geladen.

Standardmäßig ist das Limit für die XML-Entitätenerweiterung 10000. Sie können es ändern, indem Sie REXML::Document.entity_expansion_limit ändern. z.B.

REXML::Document.entity_expansion_limit = 1000

Diese Korrektur wird als Gem verfügbar gemacht und von zukünftigen Versionen von Rails verwendet, aber Benutzer sollten umgehend Korrekturmaßnahmen ergreifen.

Danksagung

Verdienst an Luka Treiber und Mitja Kolsek von ACROS Security für die Offenlegung des Problems an die Ruby und Rails Security Teams.

Verdienst an Michael Koziarski vom Rails Core Team für die Erstellung des Monkey Patch zur Behebung der Schwachstelle.

Änderungen

  • 2008-08-29 18:46 +09:00 Hat die Zusammenfassung korrigiert, um nicht irreführend zu sein, dass diese Schwachstelle Rails-spezifisch ist.
  • 2008-11-09 12:40 +09:00 Behoben einen Fehler des Monkey Patch.

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

Weitere Neuigkeiten...