MOPS: 12 neue Schwachstellen und ein Tadel an die Entwickler
Kommentare

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

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

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -