Skip to content

Commit e86a0dd

Browse files
committed
Import latest news posts (de, en, es, fr, ja)
1 parent 3cdcba6 commit e86a0dd

26 files changed

+1483
-14
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
layout: news_post
3+
title: "Denial-of-Service- und Objekterstellungs-Sicherheitslücken in JSON (CVE-2013-0269)"
4+
author: "Quintus"
5+
lang: de
6+
---
7+
8+
Es ist möglich, einen Denial-of-Service- und Objekterstellungs-Angriff
9+
auf die mit Ruby ausgelieferte `json`-Bibliothek durchzuführen. Dieser
10+
Sicherheitslücke wurde die CVE-Nummer *CVE-2013-0269* zugewiesen und wir
11+
empfehlen dringend, Ruby zu aktualisieren.
12+
13+
### Details
14+
15+
Beim Parsen gewisser JSON-Dokumente kann der `json`-Gem (auch der mit
16+
Ruby mitgelieferte) dazu gebracht werden, Ruby-Symbole in ein Zielsystem
17+
einzuschleusen. Da Ruby-Symbole bekanntlich nicht von der Garbage
18+
Collection betroffen sind, kann dies für einen Denial-of-Service-Angriff
19+
ausgenutzt werden.
20+
21+
Dieselbe Technik kann genutzt werden, um auf einem Zielsystem Objekte zu
22+
erstellen, die sich wie interne Objekte verhalten. Diese erscheinen nach
23+
außen hin normal, können aber zur Umgehung bestimmter
24+
Sicherheitsmechanismen benutzt werden und damit als Sprungbrett für
25+
SQL-Injection-Angriffe in RubyOnRails dienen.
26+
27+
Betroffener Code sieht so aus:
28+
29+
{% highlight ruby %}
30+
JSON.parse(user_input)
31+
{% endhighlight %}
32+
33+
Wobei die `user_input`-Variable ein JSON-Dokument hält, das etwa so
34+
aussieht:
35+
36+
37+
{"json_class":"foo"}
38+
39+
Der JSON-Gem wird daraufhin versuchen, die Konstante `foo`
40+
nachzuschlagen und dabei ein Symbol erzeugen.
41+
42+
In `json` Version 1.7.x können Objekte mit beliebigen Attributen wie
43+
folgt erstellt werden:
44+
45+
46+
{"json_class":"JSON::GenericObject","foo":"bar"}
47+
48+
Dieses Dokument erzeugt eine Instanz von `JSON::GenericObject` mit einem
49+
Attribut `foo`, das den Wert `"bar"` hält. Durch die Instanziierung
50+
solcher Objekte können beliebige Symbole erzeugt werden und in einigen
51+
Fällen sogar Sicherheitsmechanismen umgangen werden.
52+
53+
BITTE BEACHTEN: Dieses Verhalten **ändert sich nicht** bei der
54+
Verwendung von `JSON.load`. `JSON.load` sollte man **niemals** Input aus
55+
nicht vertrauenswürdigen Quellen übergeben — wenn Se JSON aus nicht
56+
vertrauenswürdigen Quellen verarbeiten, benutzen Sie **immer**
57+
`JSON.parse`.
58+
59+
Alle Nutzer eines betroffenen Release sollten entweder aktualisieren
60+
oder einen der folgenden Workarounds umgehend anwenden.
61+
62+
### Workarounds
63+
64+
Nutzer, die Ruby oder den JSON-Gem nicht aktualisieren können, sollten
65+
ihren Code von diesem:
66+
67+
{% highlight ruby %}
68+
JSON.parse(json)
69+
{% endhighlight %}
70+
71+
auf diesen ändern:
72+
73+
{% highlight ruby %}
74+
JSON.parse(json, :create_additions => false)
75+
{% endhighlight %}
76+
77+
Wenn Sie den `JSON.parse` nutzenden Code nicht anpassen können (weil Sie
78+
zum Beispiel einen Gem wie `multi_json` verwenden, der von `JSON.parse`
79+
abhängt), verwenden Sie diesen Monkeypatch:
80+
81+
{% highlight ruby %}
82+
module JSON
83+
class << self
84+
alias :old_parse :parse
85+
def parse(json, args = {})
86+
args[:create_additions] = false
87+
old_parse(json, args)
88+
end
89+
end
90+
end
91+
{% endhighlight %}
92+
93+
### Betroffene Versionen
94+
95+
* Alle Versionen von Ruby 1.9 vor 1.9.3-p392
96+
* Alle Versionen von Ruby 2 vor 2.0.0-p0
97+
* Alle Trunk-Revisionen vor Revision 39208
98+
99+
### Danksagung
100+
101+
Großer Dank geht an die folgenden Personen, die das Problem
102+
verantwortungsvoll gemeldet („responsible disclosure“) und mit dem
103+
Rails-Team zusammengearbeitet haben, um es zu beheben:
104+
105+
* Thomas Hollstegge von *Zweitag* (www.zweitag.de)
106+
* Ben Murphy
107+
108+
### Verlauf
109+
110+
* Erstmals veröffentlicht: 2013-02-22 12:00:00 (UTC)
111+
+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
---
2+
layout: news_post
3+
title: "Entitätsexpansion-DoS-Schwachstelle in REXML (XML-Bombe)"
4+
author: "Quintus"
5+
lang: de
6+
---
7+
8+
Unkontrollierte Expansion von Entitäten in REXML kann zu einer
9+
DoS-Verwundbareit führen (die CVE-Nummer wird später noch zugewiesen).
10+
Wir empfehlen stark, Ruby zu aktualisieren.
11+
12+
### Details
13+
14+
Beim Lesen von Textknoten aus einem XML-Dokument kann der REXML-Parser
15+
dazu gebracht werden, extrem große String-Objekte zu allokieren, die den
16+
gesamten Arbeitsspeicher eines Rechners verbrauchen und somit für eine
17+
Denial-of-Service-Attacke genutzt werden können.
18+
19+
Betroffener Code sieht so aus:
20+
21+
{% highlight ruby %}
22+
document = REXML::Document.new some_xml_doc
23+
document.root.text
24+
{% endhighlight %}
25+
26+
Wenn die #text-Methode aufgerufen wird, werden die Entitäten expandiert.
27+
Ein Angreifer kann so mithilfe eines verhältnismäßig kleinen
28+
XML-Dokuments erreichen, dass bei der Expansion der Entitäten extreme
29+
Mengen an Arbeitsspeicher auf dem Zielsystem verbraucht werden.
30+
31+
Beachten Sie, dass dieser Angriff dem „Billion Laughs“-Angriff ähnlich
32+
ist, sich aber dennoch von diesem unterscheidet. Er ist auch mit Pythons
33+
*CVE-2013-1664* verwandt.
34+
35+
Alle Nutzer eines betroffenen Release sind angehalten, entweder umgehend
36+
zu aktualisieren oder den folgenden Workaround anzuwenden.
37+
38+
### Workaround
39+
40+
Wenn Sie Ruby nicht aktualisieren können, benutzen Sie diesen
41+
Monkeypatch als Notlösung:
42+
43+
{% highlight ruby %}
44+
class REXML::Document
45+
@@entity_expansion_text_limit = 10_240
46+
47+
def self.entity_expansion_text_limit=( val )
48+
@@entity_expansion_text_limit = val
49+
end
50+
51+
def self.entity_expansion_text_limit
52+
@@entity_expansion_text_limit
53+
end
54+
end
55+
56+
class REXML::Text
57+
def self.unnormalize(string, doctype=nil, filter=nil, illegal=nil)
58+
sum = 0
59+
string.gsub( /\r\n?/, "\n" ).gsub( REFERENCE ) {
60+
s = self.expand($&, doctype, filter)
61+
if sum + s.bytesize > REXML::Document.entity_expansion_text_limit
62+
raise "entity expansion has grown too large"
63+
else
64+
sum += s.bytesize
65+
end
66+
s
67+
}
68+
end
69+
70+
def self.expand(ref, doctype, filter)
71+
if ref[1] == ?#
72+
if ref[2] == ?x
73+
[ref[3...-1].to_i(16)].pack('U*')
74+
else
75+
[ref[2...-1].to_i].pack('U*')
76+
end
77+
elsif ref == '&amp;'
78+
'&'
79+
elsif filter and filter.include?( ref[1...-1] )
80+
ref
81+
elsif doctype
82+
doctype.entity( ref[1...-1] ) or ref
83+
else
84+
entity_value = DocType::DEFAULT_ENTITIES[ ref[1...-1] ]
85+
entity_value ? entity_value.value : ref
86+
end
87+
end
88+
end
89+
{% endhighlight %}
90+
91+
Der Monkeypatch begrenzt die Größe der Entitätsersetzungen auf 10.000
92+
pro Knoten; REXML besitzt bereits eine Standardbegrenzung auf 10.000
93+
Entitätsersetzungen pro Dokument, sodass die durch Entitätsersetzung
94+
maximal erzeugbare Menge an Text sich um etwa 98 Megabyte bewegen wird.
95+
96+
### Betroffene Versionen
97+
98+
* Alle Versionen von Ruby 1.9 vor 1.9.3-p392
99+
* Alle Versionen von Ruby 2 vor 2.0.0-p0
100+
* Alle Trunk-Revisionen vor Revision 39384
101+
102+
### Danksagung
103+
104+
Vielen Dank an Ben Murphy für das Melden dieses Problems.
105+
106+
### Verlauf
107+
108+
* Erstmals veröffentlicht am 2013-02-22 12:00:00 (UTC)
109+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 1.9.3-p392 veröffentlicht"
4+
author: "Quintus"
5+
lang: de
6+
---
7+
8+
Ruby 1.9.3-p392 ist nun auch noch veröffentlicht worden — wir
9+
entschuldigen uns für diese häufigen Releases, aber hierbei handelt es
10+
sich um wichtige Sicherheitsaktualisierungen.
11+
12+
Hierbei handelt es sich um die neueste stabile Version der 1.9er-Serie.
13+
Sie enthält Sicherheitsfixes für die mit Ruby mitgelieferten JSON- und
14+
REXML-Bibliotheken, nebst einigen kleineren Bugfixes.
15+
16+
* [Entitätsexpansion-DoS-Schwachstelle in REXML][1]
17+
* [Denial-of-Service- und Objekterstellungs-Sicherheitslücken in
18+
JSON][2]
19+
20+
Siehe die [Tickets][3] und das [Changelog][4] für weitere Informationen.
21+
22+
### Download
23+
24+
[ruby-1.9.3-p392.tar.bz2][5]
25+
26+
: **MD5-Summe**
27+
28+
a810d64e2255179d2f334eb61fb8519c
29+
30+
**SHA256**
31+
32+
5a7334dfdf62966879bf539b8a9f0b889df6f3b3824fb52a9303c3c3d3a58391
33+
34+
**Größe**
35+
36+
10\.024.221 Byte
37+
38+
[ruby-1.9.3-p392.tar.gz][6]
39+
40+
: **MD5-Summe**
41+
42+
f689a7b61379f83cbbed3c7077d83859
43+
44+
**SHA256**
45+
46+
8861ddadb2cd30fb30e42122741130d12f6543c3d62d05906cd41076db70975f
47+
48+
**Größe**
49+
50+
12\.557.294 Byte
51+
52+
[ruby-1.9.3-p392.zip][7]
53+
54+
: **MD5-Summe**
55+
56+
212fb3bc41257b41d1f8bfe0725916b7
57+
58+
**SHA256**
59+
60+
f200ce4a63ce57bea64028a507350717c2a16bdbba6d9538bc69e9e7c2177c8b
61+
62+
**Größe**
63+
64+
13\.863.402 Byte
65+
66+
### Danksagung
67+
68+
Viele Commiter, Tester und Nutzer, die Fehler gemeldet haben, halfen uns
69+
sehr bei der Veröffentlichung dieser Version. Vielen Dank an alle eure
70+
Mitarbeit.
71+
72+
73+
74+
[1]: http://www.ruby-lang.org/de/news/2013/02/23/rexml-bombe/ "XML-Bombe"
75+
[2]: http://www.ruby-lang.org/de/news/2013/02/23/denial-of-service-cve-2013-0269/ "CVE-2013-0269"
76+
[3]: https://bugs.ruby-lang.org/projects/ruby-193/issues?set_filter=1&amp;status_id=5
77+
[4]: http://svn.ruby-lang.org/repos/ruby/tags/v1_9_3_392/ChangeLog
78+
[5]: ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.bz2
79+
[6]: ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz
80+
[7]: ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.zip

0 commit comments

Comments
 (0)