Denial-of-Service- und unsichere Objekterstellungsschwachstelle in JSON (CVE-2013-0269)

Gepostet von usa am 22. Feb 2013

Es gibt eine Denial-of-Service- und unsichere Objekterstellungsschwachstelle in der mit Ruby gebündelten JSON-Bibliothek. Diese Schwachstelle wurde unter der CVE-Kennung CVE-2013-0269 zugewiesen. Wir empfehlen dringend, Ruby zu aktualisieren.

Details

Beim Parsen bestimmter JSON-Dokumente kann das JSON-Gem (im Lieferumfang von Ruby enthalten) dazu verleitet werden, Ruby-Symbole in einem Zielsystem zu erstellen. Da Ruby-Symbole nicht vom Garbage Collector bereinigt werden, kann dies zu einem Denial-of-Service-Angriff führen.

Die gleiche Technik kann verwendet werden, um Objekte in einem Zielsystem zu erstellen, die sich wie interne Objekte verhalten. Diese "ähnlichen" Objekte können verwendet werden, um bestimmte Sicherheitsmechanismen zu umgehen, und können als Sprungbrett für SQL-Injection-Angriffe in Ruby on Rails dienen.

Betroffener Code sieht so aus

JSON.parse(user_input)

Wo die Variable `user_input` ein JSON-Dokument wie dieses enthält

{"json_class":"foo"}

Das JSON-Gem versucht, die Konstante "foo" nachzuschlagen. Das Nachschlagen dieser Konstante erstellt ein Symbol.

In JSON Version 1.7.x können Objekte mit beliebigen Attributen über JSON-Dokumente wie diese erstellt werden

{"json_class":"JSON::GenericObject","foo":"bar"}

Dieses Dokument führt zur Instanziierung von JSON::GenericObject mit dem Attribut "foo" und dem Wert "bar". Die Instanziierung dieser Objekte führt zur Erstellung beliebiger Symbole und kann in einigen Fällen zur Umgehung von Sicherheitsmaßnahmen verwendet werden.

BITTE BEACHTEN SIE: Dieses Verhalten **ändert sich nicht**, wenn `JSON.load` verwendet wird. `JSON.load` sollte **niemals** mit Eingaben aus unbekannten Quellen gespeist werden. Wenn Sie JSON aus einer unbekannten Quelle verarbeiten, verwenden Sie **immer** `JSON.parse`.

Alle Benutzer, die eine betroffene Version ausführen, sollten entweder ein Upgrade durchführen oder umgehend eine der Problemumgehungen verwenden.

Problemumgehungen

Für Benutzer, die Ruby oder das JSON-Gem nicht aktualisieren können, ändern Sie Ihren Code von diesem

JSON.parse(json)

Zu diesem

JSON.parse(json, :create_additions => false)

Wenn Sie die Verwendung von `JSON.parse` nicht ändern können (z. B. weil Sie ein Gem verwenden, das von `JSON.parse` abhängt, wie z. B. multi_json), wenden Sie diesen Monkey-Patch an

module JSON
  class << self
    alias :old_parse :parse
    def parse(json, args = {})
      args[:create_additions] = false
      old_parse(json, args)
    end
  end
end

Betroffene Versionen

  • Alle Ruby 1.9-Versionen vor Ruby 1.9.3 Patchlevel 392
  • Alle Ruby 2.0-Versionen vor Ruby 2.0.0 Patchlevel 0
  • vor Trunk Revision 39208

Credits

Ein großer Dank geht an die folgenden Personen für die verantwortungsvolle Offenlegung dieses Problems und die Zusammenarbeit mit dem Rails-Team, um es zu beheben

  • Thomas Hollstegge von Zweitag (www.zweitag.de)
  • Ben Murphy

Verlauf

  • Ursprünglich veröffentlicht am 2013-02-22 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

Weitere Neuigkeiten...