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
endBetroffene 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