Wie Heise gestern berichtete (http://www.heise.de/newsticker/meldung/Gefahr-durch-offene-PHP-Luecke-1567433.html) gibt es eine wunderschöne Sicherheitslücke im Bezug auf CGI und PHP. So führt der Aufruf:
http://localhost/index.php?-s
dazu das der Quellcode der Webseite ausgegeben wird. Das ist natürlich unpraktisch wenn dort Konfigurationsvariablen enthalten z.B. die Zugangsdaten für eine Datenbankverbindung. Zur Lösung des Problems gibt es drei Varianten:
- PHP Version mit dem Bugfix einspielen
- Rewrite Anweisung in die .htaccess
- Wrapper welcher vor dem PHP-CGI aufgerufen wird
Die erste Variante scheidet aus, da der aktuelle Bugfix leicht umgangen werden kann. Die zweite Variante (einzutragen in eine „.htaccess“) sieht so aus:
RewriteEngine on RewriteCond %{QUERY_STRING} ^[^=]*$ RewriteCond %{QUERY_STRING} %2d|\- [NC] RewriteRule .? - [F,L]
Die dritte Variante setzt einen Wrapper vor den eigentlich Aufruf und filtert die entsprechenden Anweisungen heraus. Dazu ändert man in der „httpd.conf“ die Zeile:
Action application/x-httpd-php /cgi-bin/php-cgi.exe
in
Action application/x-httpd-php /cgi-bin/php-cgi-wrapper.exe
und startet den Apache Server neu. Der Quelltext des Wrappers sieht dabei so aus:
#include <process.h> #define PHP_ORIG "php-cgi.exe" int main(int argc, char **argv) { if(argc>1) argv[1]=0; _execv(PHP_ORIG, argv); }
Das ganze kann hier auch als fertiges Visual Studio Projekt oder gleich als ausführbare Datei heruntergeladen werden.
Weitere Informationen gibt es unter:
http://www.kb.cert.org/vuls/id/520827
http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
http://www.heise.de/newsticker/meldung/PHP-patcht-schnell-aber-nicht-gruendlich-1567906.html
Siehe dazu diesen netten kleinen Gag von Facebook:
https://www.facebook.com/?-s
Falls sie es irgendwann abstellen, Inhalt der URL ist hier: http://paste.invertika.org/907