Das US-CERT warnt vor einer kritischen Sicherheitslücke in PHP, die versehentlich an die Öffentlichkeit geraten ist, während die Entwickler noch an einem Fix arbeiten. Betroffen sind Server, die PHP im CGI-Modus betreiben; FastCGI-Installationen von PHP sind hingegen nicht betroffen.

Ein Team entdeckte das Problem während eines Capture-The-Flag-Wettbewerbs. Im Wesentlichen beruht es darauf, dass man dem PHP-CGI-Programm über den Aufruf spezieller URLs Kommandozeilenparameter unterjubeln kann. So sorgt etwa die URL

http://localhost/index.php?-s
dafür, dass der Web-Server php-cgi mit dem Parameter -s aufruft wird, was den PHP-Quellcode von index.php als HTML ausgibt, statt ihn auszuführen. Das wäre an sich schon schlimm genug, weil PHP-Applikationen oft kritische Daten wie Zugangsdaten für Datenbanken enthalten. Doch laut den Entdeckern kann man damit auch direkt Code einschleusen und ausführen lassen, was die Lücke in die höchste Gefahrenstufe hebt.

Eigentlich sollte die Veröffentlichung der Lücke erst nach der Bereitstellung eines Patches erfolgen. Die Entdecker hatten dazu ihren Fund an das US-CERT weitergegeben, die als Vermittler agierten. Erst gestern hatte das CTF-Team zugestimmt, den PHP-Entwicklern noch etwas Zeit einzuräumen, den bereits vorhandenen Patch zu testen. Doch dann wurde der versehentlich als "öffentlich" markierte Eintrag in der PHP-Fehlerdatenbank auf der US-Site reddit gepostet und die Katze war aus dem Sack. Das CTF-Team veröffentlichte kurz danach weitere Informationen zu der PHP-Lücke in einem Blog.

Das US-CERT sieht derzeit noch keinen praktikable Möglichkeit sich zu schützen; die Entdecker der Lücke empfehlen, das PHP-CGI-Programm durch ein Wrapper-Skript zu ersetzen, das die Parameter filtert, bevor es das eigentliche PHP-Programm aufruft. Sie stellen auch ein passendes Beispiel-Skript bereit. Da das PHP-Team bereits einen Patch testet, sollte es auch bald eine offizielle Lösung für das Problem geben.

Update: Das PHP-Team hat die Versionen PHP 5.3.12 und PHP 5.4.2 veröffentlicht, die dieses Problem beseitigen. Für Admins, die derzeit noch nicht auf diese Versionen umstellen können, empfehlen sie, Query Strings zu filtern, die mit einem "-" anfangen und kein "=" enthalten. Mit dem Apache-Modul mod_rewrite erledigt das:

Code:
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
RewriteRule ^(.*) $1? [L]
Die genauere Formatierung sowie weitere Infos findet ihr hier.

Grüße