Und schon ist die zweite Woche des MOPS abgekürzten Month of PHP Security fast vorbei. Was ist seit dem ersten Überblick passiert? Es wurden acht neue Schwachstellen in PHP (insgesamt bisher vierzehn), vier in PHP-Anwendungen (insgesamt neun) und drei weitere Tips und Tools (insgesamt sechs) veröffentlicht.
Schachstellen in PHP
Bei den Schwachstellen in PHP ging es mit einem von Externen eingereichten
Beitrag weiter: Mateusz Kocielski hat in den Funktionen
sqlite_single_query()
und sqlite_array_query()
eine Schwachstelle gefunden: Durch die Nutzung nicht initialisierten
Speichers kann es zur Ausführung eingeschleusten Codes kommen
(Beschreibung
von Mateusz Kocielski, MOPS-Eintrag für die
Schwachstelle in sqlite_single_query()
(MOPS-2010-012)
und sqlite_array_query()
(MOPS-2010-013)).
Danach ging es mit von Stefan Esser entdeckten Schwachstellen weiter: Interruption-Schwachstellen im ZEND_BW_XOR-, ZEND_SL- und ZEND_SR-Opcode erlauben das Ausspähen von Speicherbereichen (MOPS-2010-014, MOPS-2010-015 und MOPS-2010-016). Im Gegensatz zu den unten erwähnten Schwachstellen im ‚call time pass by reference‘-Feature wird diesmal keine interne PHP-Funktion, sondern ein Opcode-Handler der Zeus-Engine angegriffen. Daher reicht es in diesen Fällen nicht aus, das ‚call time pass by reference‘-Feature zu entfernen.
Auch für die Schwachstellen im ‚call time pass by reference‘-Feature, die
das Ausspähen von Speicherbereichen erlauben, wurde ein weiterer
Angriffsvektor veröffentlicht: Die Schwachstellen können auch durch die
Funktion preg_quote()
ausgenutzt werden
(MOPS-2010-017).
Das grundlegende Problem wurde von Stefan Esser auf der Konferenz
‚BlackHat USA 2009‘ vorgestellt
(Präsentation
und
Paper
als PDF), die Entwickler haben auch versucht, das betroffene Feature zu
entfernen, waren aber nur mäßig erfolgreich.
Zwei weitere Schwachstellen wurden von Mateusz Kocielski mit dem von ihm
entwickelten PHP Fuzzer Minerva
(.tar.bz2)
gefunden, den er in einem weiteren
MOPS-Beitrag
beschreibt: Eine Stack Exhaustion in der Funktion fnmatch()
erlaubt DoS-Angriffe
(MOPS-2010-021),
während es im Stream-Context eine „Use after Free“-Schwachstelle gibt, die
ebenfalls zumindest DoS-Angriffe ermöglicht. Die Schwachstelle wurde nicht
weiter untersucht, so dass nicht bekannt ist, ob darüber auch Code
eingeschleust und ausgeführt werden kann
(MOPS-2010-022).
Alle Schwachstellen wurden in PHP 5.2 bis einschließlich Version 5.2.13 und PHP 5.3 bis einschließlich Version 5.3.2 gefunden und bisher nicht behoben.
Schwachstellen in PHP-Anwendungen
Bei den Schwachstellen in PHP-Anwendungen ging es mit dem eLearning-System
EFront
weiter, in dem Stefan Esser im Rahmen des ‚SQL Injection Marathon‘ eine
SQL-Injection-Schwachstellen in der Chat-Funktion fand. Betroffen ist der
Parameter chatrooms_ID
im Skript ask_chat.php
(MOPS-2010-018).
Stefan Esser hat die Entwickler parallel zur Veröffentlichung auf der
MOPS-Website informiert, die die Schwachstelle zügig behoben
und eine neue Version (3.6.2 Build 3551)
veröffentlicht
haben.
Die nächste Schwachstelle in einer PHP-Anwendung betraf gleich zwei Skripte: Eine Schwachstelle im WYSIWYG-Editor Xinha erlaubte das Einfügen zusätzlicher Zeilen in die Konfigurationsdatei und dadurch unter Umständen das Heraufladen von PHP-Skripten (MOPS-2010-020). Die Entwickler haben die Schwachstelle zügig behoben. Das zweite betroffene Skript lag bei Serendipity, dass Xinha verwendet und dadurch über die Schwachstelle darin angreifbar war (MOPS-2010-019). Auch hier wurde die Schwachstelle schnell behoben und die korrigierte Version 1.5.3 veröffentlicht.
Die bisher letzte Schwachstelle wurde wieder im Rahmen des ‚SQL Injection
Marathon‘ gefunden: In
Cacti
bis einschließlich Version 0.8.7e wurde eine SQL-Injection-Schwachstelle
gefunden, die durch die Prüfung der falschen Variable zustande kommt
(MOPS-2010-023):
Geprüft und gefiltert wird ['rra_id']
, verwendet
aber ['rra_id']
. Die beiden Werte sind aber nur
identisch, wenn es keinen POST- oder COOKIE-Parameter gleichen Namens gibt.
Ein Angreifer kann also über GET seinen SQL-Injection-Code
und gleichzeitig über POST oder als Cookie einen harmlosen Wert
übertragen, der den Schadcode im -Array überschreibt.
Die Cacti-Entwickler wurden parallel zur Veröffentlichung der
Schwachstelle informiert, bisher gibt es keinen Patch. Nebenbei bemängelt
Stefan Esser noch den Umgang der Entwickler mit Schwachstellen: Statt eine
fehlerbereinigte Version zu veröffentlichen, gibt es nur eine Liste der
seit der letzten Version veröffentlichten Patches, die die Benutzer dann
selbst einzeln installieren müssen.
Es ist übrigens nicht das erste Mal, dass
die Cacti-Entwickler die falsche Variable prüfen: Schon 2005 hat Stefan Esser eine
entsprechende Schwachstelle in dem Skript
gefunden,
die damals in Version 0.8.6f behoben wurden. Jetzt dürfte wohl Version
0.8.7f fällig sein.
Tips und Tools
Außer den Schwachstellen in PHP und PHP-Anwendungen wurden auch wieder Tips und Tools veröffentlicht: Jordi Boggiano hat beschrieben, wie nicht vorhersagbare Session-IDs erzeugt werden können. Mateusz Kocielski hat, wie schon oben erwähnt, eine Beschreibung des von ihm entwickelten PHP Fuzzers Minerva (.tar.bz2) beigesteuert. Und Stefan Esser hat am ‚Bollerwagentag‘ eine kurze Beschreibung zum Dekodieren von mit dem php-crypt.com PHP-Encoder geschützten Skripten geschrieben.
Nachträge zur Vorwoche
In der
vorigen Woche
waren ja einige Schwachstellen offen geblieben. Die in PHP wurden bisher
nicht behoben, aber wie sieht es denn bei den Anwendungen aus? Bei
ClanTiger,
in dem eine SQL-Injection-Schwachstelle gefunden wurde, hat sich
anscheinend nichts getan. Auch in
DeluxeBB
wurde eine SQL-Injection-Schwachstelle gefunden. Vermutlich wurde die
behoben. Jedenfalls gibt es einen Foren-Eintrag
‚Security Exploit in Version 1.3 #3‘
vom 10.5., in dem ein aktualisiertes Skript header.php
zum
Download bereitgestellt wird. Darin wird der Cookie-Wert ‚memberid‘ in
einen Integer-Wert umgewandelt, und dieses Skript wird vom von der
Schwachstelle betroffenen Skript newpost.php
eingebunden.
Ich habe mir nicht die Mühe gemacht, das genauer zu untersuchen – die
Entwickler haben sich ja auch nicht die Mühe gemacht, die behobene
Schwachstelle irgendwie einzugrenzen. Der Foren-Eintrag ist äußerst
nichtssagend:
„Hello Community, another minor exploit has been detected. Please update your board with the extracted zip files. The full download of 1.3 has of course been updated too. muppler“
Also hoffen wir mal das Beste. Vor allem, weil SQL-Injection alles andere als ein „minor exploit“ ist. Schon das von Stefan Esser aufgeführte Beispiel erlaubt es einem Angreifer, sich danach als Admin anzumelden. Und ein Angreifer mit Admin-Rechten ist alles, aber nicht „minor“.
Fazit
Das „durchwachsene“ Ergebnis der PHP-Entwickler aus der
Vorwoche
hat sich weiter verschlechtert, nun sind schon vierzehn Schwachstellen zu
beheben, darunter die schon seit dem ‚Month of PHP Bugs‘ 2007
bekannte
in der Funktion hash_update_file()
, die die Ausführung
eingeschleusten Codes erlaubt. Bei den PHP-Anwendungen sieht es wie schon
in der vorigen Woche besser aus, diesmal wurden Schwachstellen in vier
Anwendungen veröffentlicht, und für drei davon gibt es bereits Updates
bzw. Patches. Die Schwachstelle in Cacti wurde noch nicht behoben, aber
sie wurde ja auch erst gestern veröffentlicht. Außerdem sollten die
Entwickler sich ihren Code mal genauer ansehen, nach 5 Jahren immer noch
den gleichen Fehler zu machen ist doch etwas peinlich.
Carsten Eilers