PHP: Sicherheitslücke in allen Versionen gefährdet Scripte auf CGI-Servern

Stefan Keller, den 4. Mai 2012
php-Logo
php-Logo

Server-Administratoren aufgepasst: In der CGI-Version von PHP ist eine Sicherheitslücke, die so gut wie alle Versionen betrifft, und bislang nicht geschlossen wurde. Web-Server, die ihre Scripte per CGI ausführen, stellen mögliche Sicherheitsprobleme dar. Mit einem manipulierten Parameter kann der Quellcode des Scripts eingesehen werden. Sind Passwörter, etwa für die Datenbank oder FTP-Zugänge, im PHP-Script hinterlegt, ist das für sich genommen bereits eine mittlere Katastrophe, aber laut Entdecker der Lücke ist es auf eine solche Weise ebenfalls möglich, Code einzuschleusen und ausführen zu lassen.

Wenige Konfigurationen betroffen

Auf die Warnung folgt die gute Nachricht: In der Praxis dürften solche Konfigurationen kaum anzutreffen sein. PHP über CGI laufen zu lassen, ist die älteste Methode, PHP-Scripte auszuführen und inzwischen in vielerlei Hinsicht überholt. Wer nur eine Webseite auf einem Server betreibt, ist allein aus Performance-Gründen mit PHP als Modul des Webservers besser bedient und wer die Sicherheit von CGI mit guter Performance verbinden möchte, greift zu FCGI oder suPHP. Alle drei Alternativen sind – jede auf ihre Weise – in einer oder mehreren Disziplinen besser geeignet als das „echte“ CGI und nicht von besagter Lücke betroffen.

Selbsttest möglich

Wer Sorge hat, dass sein Server per CGI angetrieben wird, kann herausfinden, ob er von der Lücke betroffen ist. Dafür muss einfach der Parameter „-s“ an den Scriptaufruf angehängt werden, beispielsweise:

http://example.com/index.php?-s

Update schon vorhanden

Die PHP-Entwickler haben mit PHP 5.3.12 und 5.4.2 bereits ein Update bereitgestellt. Dieses hat aber ein kleines Problem: Man wollte den Bugreport eigentlich geheim lassen, um sich in Ruhe um einen funktionierenden Fix zu kümmern. Es kam durch einen technischen Fehler aber dazu, dass der Bugreport vorzeitig veröffentlicht wurde, weshalb die Entwickler sich selbst unter enormen Zeitdruck gesetzt haben. Deshalb ist nur der simpelste aller möglichen Fälle vom Fix abgedeckt und PHP somit auch nach dem Update noch verwundbar.

Wirksamer Schutz

Der momentan einzig wirksame Schutz gegen die Lücke ist entweder auf PHP über CGI zu verzichten (wie gesagt, FCGI und suPHP stellen keine Probleme dar) oder in der .htaccess-Datei (im Falle des Apache-Webserver) folgenden Zweizeiler nachzutragen:

RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
RewriteRule ^(.*) $1? [L]

PHP unschuldig

Interessant ist übrigens, dass von der Sache her nicht einmal PHP Schuld an der Lücke hat, denn man hat nur die CGI-Spezifikation implementiert, die im Abschnitt 7 das Verhalten explizit vorsieht.


Ähnliche Nachrichten