Der Mai und damit auch der „MOPS“ abgekürzte Month of PHP Security ist vorüber. In den ersten vier Wochen wurden 33 Schwachstellen in PHP und 13 in PHP-Anwendungen veröffentlicht, dazu gab es 11 „Tips und Tools“. In den letzten 4 Tagen sind noch 14 Schwachstellen in PHP dazu gekommen, außerdem gab es einen zusätzlichen Text.
Schwachstellen in PHP
Ein Großteil der während des „Endspurts“ veröffentlichten Schwachstellen in
PHP entstehen durch das ‚call time pass by reference‘-Feature und erlauben
das Ausspähen von Speicherbereichen. Betroffen sind die Funktionen
trim()/ltrim()/rtrim()
(MOPS-2010-047),
substr_replace()
(MOPS-2010-048),
preg_match()
(MOPS-2010-050),
unpack()
(MOPS-2010-051)
und
pack()
(MOPS-2010-052)
sowie der ZEND_FETCH_RW
-Opcode
(MOPS-2010-053).
Weitere Interruption-Schwachstellen haben schwerwiegendere Folgen: Beim
Verarbeiten tief verschachtelter Arrays durch die Funktion
parse_str()
kann es zu einer Memory Corruption kommen, die
die Ausführung eingeschleusten Codes erlaubt
(MOPS-2010-049).
Auch die END_CONCAT/ZEND_ASSIGN_CONCAT
-Opcodes enthalten eine
entsprechende Schwachstelle, die sowohl das Ausspähen von
Speicherbereichen als auch die Ausführung von Code erlaubt
(MOPS-2010-054).
Ob sich eine Memory Corruption durch eine Schwachstelle in der Methode
ArrayObject::uasort()
(MOPS-2010-055)
ebenfalls zum Ausführen von Code eignet, wurde nicht angegeben.
Betroffen sind wie üblich PHP 5.2 bis einschließlich der aktuellen Version 5.2.13 und PHP 5.3 bis einschließlich der aktuellen Version 5.3.2. Das grundlegende Problem der ‚Interruption Vulnerabilities‘ wurde von Stefan Esser auf der Konferenz ‚BlackHat USA 2009‘ vorgestellt (Präsentation und Paper als PDF).
Weitere Schwachstellen wurden von Stefan Esser in der Mysqlnd-Extension in
PHP 5.3 bis einschließlich der aktuellen Version 5.3.2 gefunden: Die
Funktion php_mysqlnd_ok_read()
enthält ein Informationsleck
(MOPS-2010-056),
während in den Funktionen php_mysqlnd_rset_header_read()
(MOPS-2010-057),
php_mysqlnd_read_error_from_line()
(MOPS-2010-058)
und php_mysqlnd_auth_write()
(MOPS-2010-059)
Pufferüberlauf-Schwachstellen gefunden wurden. Ob evtl. die Ausführung von
Code möglich ist, wurde nicht angegeben.
Die letzte während des MOPS veröffentlichte Schwachstelle
befinden sich im Session Serializer von PHP 5.2 bis einschließlich
der aktuellen Version 5.2.13 und PHP 5.3 bis einschließlich der
aktuellen Version 5.3.2. Das PS_UNDEF_MARKER
-Zeichen wird
nicht korrekt ausgewertet, so dass über PHP-Code, der Variablen in
eine Session schreiben kann, beliebige serialisierte Daten in die Session
eingeschleust werden können
(MOPS-2010-060).
Schwachstellen in PHP-Anwendungen…
… wurden nicht mehr veröffentlicht, dafür aber ein zusätzlicher Beitrag aus dem Bereich
Tips und Tools
Von Ben Fuhrmannek stammt ein Artikel über ‚Virtual Meta-Scripting – Bytecode for PHP and JavaScript‘. Dessen Abstract:
„Both PHP and JavaScript are frequently being targeted for exploiting web applications. This article elaborates on the idea of building a set of virtual machines on top of each programming language. As a result a single type of bytecode can be executed by both VMs. Particular emphasis is put on designing virtual machines to be most suitable for code obfuscation in a post exploitation scenario.“
Nachträge zu dem vorigen Wochen
Aus der ersten Woche ist eine SQL-Injection-Schwachstelle in ClanTiger offen geblieben, und daran hat sich anscheinend immer noch nichts geändert. Auch ob die SQL-Injection-Schwachstelle in DeluxeBB wie vermutet behoben wurde, steht immer noch nicht fest.
In der dritten Woche waren zwei Schwachstellen in CMSQlite offen geblieben. Diese wurden in Version 1.2.1 behoben, wie ein Blick in die geänderten Skripte verrät. Auf der Website gibt es nur die Information, dass ein „Wichtiges Sicherheits-Patch für CMSQLite 1.2 veröffentlicht“ wurde.
Aus der zweiten und vierten Woche waren keine Schwachstellen mehr offen.
Fazit
Den PHP-Entwicklern bescherte der MOPS 46 neue Schwachstellen sowie eine Erinnerung an eine seit dem „Month of PHP Bugs“ bekannte. Wollen wir hoffen, dass die nun alle recht zügig behoben werden und es nicht in drei Jahren einen weiteren „Month of …“ gibt, der mit einer Erinnerung an eine alte Schwachstelle beginnt. In PHP-Anwendungen wurden insgesamt 13 Schwachstellen veröffentlicht, von denen im besten Fall nur noch die SQL-Injection-Schwachstelle in ClanTiger offen ist. Das ist doch alles in allem ein recht erfreuliches Ergebnis.